当前位置: 代码迷 >> 综合 >> OpenJudge 8467 鸣人的影分身
  详细解决方案

OpenJudge 8467 鸣人的影分身

热度:2   发布时间:2023-12-06 08:23:18.0

题目:鸣人的影分身 


思路:

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<bits/stdc++.h>
using namespace std;#define maxn 10int 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;
}