Luogu P1025 数的划分
作者:互联网
Luogu P1025 数的划分
因为这里要考虑到不重复,所以可以按升序记录每一次划分:记录上一次划分所用数,保证当前划分所用数不小于上次划分所用数,当划分次数等于\(k\)时,比较该次划分所得总分是否与\(n\)相同并记录次数。
这题标签里的剪枝就是枚举当前划分所用分数时应该从\(last\)(上次划分所用分数)枚举到\(sum+i \times (k-cur)\leq n\)为止,因为之后划分的分数一定大于或等于当前划分所用分数。
#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
void DFS(int sum,int lst,int num) {
if(num==k) {
if(sum==n) {
ans++;
}
return;
}
for(int i=lst;sum+i*(k-num)<=n;i++) {
DFS(sum+i,i,num+1);
}
return;
}
int main()
{
scanf("%d%d",&n,&k);
DFS(0,1,0);
printf("%d",ans);
return 0;
}
标签:分数,int,Luogu,sum,P1025,划分,num,所用 来源: https://www.cnblogs.com/luoshui-tianyi/p/11432213.html