题目:1050. 鸣人的影分身
思路:该问题等价于将m个苹果放置在无序的n个盘子里有多少种方法
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<double,double>PII;
const int N=(1<<20)+10;
const int mod=1000000009;
int f[15][15];//f[i][j],i表示的是苹果数量,j表示的是盘子数量
int main(){
int t;
cin>>t;
int n,m;
for(int i=0;i<=10;i++){//当苹果数量为0时,任何盘子都为0,只有一种放置方法
f[0][i]=1;
}
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){//j不从0开始的原因是因为只要有苹果,盘子就不能没有
f[i][j]=f[i][j-1];//第j个盘子放0
if(i>=j) f[i][j]+=f[i-j][j];//每个盘子都加上一个1 (这样才不会导致同一集合因顺序不同而增加次数)
}
}
while(t--){
cin>>m>>n;
cout<<f[m][n]<<endl;
}
return 0;
}