将整数n分成k份,且每份不能为空,任意两个方案不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5;
1,5,1;
5,1,1;
问有多少种不同的分法。
输入:n,k ( 6 < n ≤ 200,2 ≤ k ≤ 6 )
输出:一个整数,即不同的分法。
#include <bits/stdc++.h>
using namespace std;
int n,k,ans;
void dfs(int last,int s,int gs){
if(gs == k){
if(s == n) ans++;
return;
}
for(int i = last; s + i * (k - gs) <= n;i++){
dfs(i,s + i,gs + 1);
}
}
int main(){
//freopen("in","r",stdin);
ios::sync_with_stdio(0);
cin >> n >> k;
dfs(1,0,0);
cout << ans;
return 0;
}