OpenJudge 8467 鸣人的影分身

题目:鸣人的影分身 


思路:

f[i][j]表示有j个分身,能量为i的方案数。

转移方程:

if(j<=i) f[i][j]=f[i][j-1]+f[i-j][j]; 
else f[i][j]=f[i][i];

即当能量足够分配给所有分身时,方案数等于分配给所有分身和不分配给所有分身的方案数之和。

当能量不够时,方案数等于i个能量刚好够分的方案数。


代码:

#include
using namespace std;

#define maxn 10

int n,m;
int f[maxn+5][maxn+5]={0};

int main(){
	for(int i=0;i<=maxn;i++) f[0][i]=1;
	for(int i=1;i<=maxn;i++){
		for(int j=1;j<=maxn;j++){
			if(j<=i) f[i][j]=f[i][j-1]+f[i-j][j];
			else f[i][j]=f[i][i];
		}
	}
	
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&m,&n);
		printf("%d\n",f[m][n]);
	}
	return 0;
}

你可能感兴趣的:(动态规划)