2 solutions
-
1
#include<bits/stdc++.h> using namespace std; int n,m; int dfs(int u,int sum,int last) { if(u==n) { if(sum==0) return 1; return 0; } int res=0;//当前总和 for(int i=last;i<=sum;i++) { //当前的方案不需要记录 res+=dfs(u+1,sum-i,i); } return res; } int main() { int t; cin>>t; while(t--) { cin>>m>>n; cout<<dfs(0,m,0)<<endl;//位置,剩余,上一个 } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; int f(int m,int n) //m个苹果,n个盘子 { if(m==0||n==1) return 1; //m==0表示恰好分完,n==1只有一个盘子 if(m<n) return f(m,m); //m个苹果n个盘子,等价于m个苹果,m个盘子 return f(m,n-1)+f(m-n,n); //有一个空盘子,每个盘子至少一个苹果 } int main() { int t; cin>>t; for(int i=1;i<=t;i++) { int m,n; cin>>m>>n; cout<<f(m,n)<<endl; } return 0; }
- 1
Information
- ID
- 2121
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 13
- Accepted
- 3
- Uploaded By