题目大意:
将n分成k份,有多少种组合,例如:7
7=1+1+5
7=1+2+4
7=1+3+3
7=2+2+3
所以:将7分成3份,可以有4种组合方法;
解题思路:
1 观察发现,题目的数据:n只有200,k只有6,感觉暴力随便写一下就可以了;
2 观察样例:因为是组合问题,所以可以无序变有序:每一份必须不小于前一份;
3 边界条件:最多只能传递m份(m<=6);//随便写都不会爆
PS:如果不确定分多少份,怎么办呢?
上代码:
#include<bits/stdc++.h>
int n,m,ans=0;
void dfs(int x,int k,int t)//左边拿了x,当前剩下k,当前是第t份
{
if(t==m) { ans++; return ;}//边界:如果是最后一份,计数
for(int i=x;k-i>=i;i++)//当前的数字不能比左边的小,保证后面取的数字不能比当前值小
{
dfs(i,k-i,t+1);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n/m;i++) //第一份最多只能拿 i
{
dfs(i,n-i,2);
}
printf("%d",ans);
return 0;
}