1025 数的划分
这不就是深搜吗,深搜填数
我记得原来zp老师讲过
这个题貌似非常的不好理解,需要认真来完成,解析
题意其实很好理解了,就是将一个数n分成k份,当然显而易见的就是每一份加起来就是n
这样类似于递推的题目通常都有一个显而易见的答案
显然,当k=1的时候,只有一种方法,所以这就是递推的结束开口
num/part就是一个剪纸
为什么这么说呢
其实我也搞不懂
一共有几组呢?
part组
所以因为总共的和是num,也就是剩下的num,那么每一组最大最大也就是num/part
所以我们不需要枚举到num,只需要枚举到num/part
可能就是这个道理
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int n,k,ans;
inline int dfs(int num,int part,int now)
//剩余的将要分的数,分的数量,现在选出的数
{
if(part==1) return 1;//只有一种分解方法
int sum=0;
for(int i=now;i<=num/part;i++)
{
sum+=dfs(num-i,part-1,i);
}
return sum;
}
int main()
{
cin>>n>>k;
cout<<dfs(n,k,1)<<endl;
return 0;
}