3 solutions
-
2
#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; } -
0
#include<bits/stdc++.h> using namespace std; int ans=0; void dfs(int m,int n,int minv) { if(m==0) //没有苹果了 { ans++; return ; } if(n==0) //没有盘子了 { return ; } for(int i=minv;i<=m;i++) //枚举当前位置的苹果数量 { dfs(m-i,n-1,i); } } int main() { int t; cin>>t; int n,m; while(t--) { cin>>m>>n; ans=0; //清空苹果数量 dfs(m,n,1); cout<<ans<<endl; } return 0; }
- 1
Information
- ID
- 2121
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 26
- Accepted
- 8
- Uploaded By