1222:放苹果
之所以要约束下次分配苹果的最小个数,是因为如果不进行约束,就有可能计算重复情况。
初始为1也是基于同样的考虑。
1 #include<iostream> 2 using namespace std; 3 int k,n; 4 //c表示下次分配最小个数,d表示分配到了第几个盘子,b表示还有多少个苹果可分配 5 void dfs(int c,int d,int b){ 6 if(c>b||!b||d>n){ 7 if(!b)k++; 8 return; 9 } 10 for(int i=c;i<=b;i++){ 11 dfs(i,d+1,b-i); 12 } 13 } 14 int main(){ 15 int t,m; 16 cin>>t; 17 while(t--){ 18 cin>>m>>n; 19 k=0; 20 dfs(1,1,m); 21 cout<<k<<endl; 22 } 23 return 0; 24 }