题意:把n分成k份(可以为0)求有多少种不同的分法
首先状态转移方程f[i][j]为把i分成j份的方案数
如果j=1那么f[i][j]=1因为分成一份只有一种方法
如果i=1或i=0那么f[i][j]=1因为分1或分0都只有一种方法
如果i<j那么f[i][j]=f[i][i]因为没得分了多的每份为0
否则f[i][j]=f[i][j-1]+f[i-j][j]
等于把i分成j-1份+把i-j分成j份。
#include<cstdio>
using namespace std;
int ans[11][11];
int main(){
int t,n,k;
scanf("%d",&t);
for(int i=0;i<=10;i++)
for(int j=0;j<=10;j++){
if (i==1||j==1||i==0) ans[i][j]=1;
else if (i<j) ans[i][j]=ans[i][i];
else ans[i][j]=ans[i-j][j]+ans[i][j-1];
}
for (int i=1;i<=t;i++)
scanf("%d%d",&n,&k),printf("%d\n",ans[n][k]);
}