P1025 数的划分
这题要用dfs,思路简单不容易错而且代码好写方便改错。这里因为要考虑到不重复,所以可以按升序记录每一次划分:记录上一次划分所用的数,保证当前划分所用数不小于上次划分所用分数,当划分次数等于k时比较该次划分所得总分是否与n相同并记录次数。
代码如下
#include<bits/stdc++.h>
int n,k,cnt;
void dfs(int last,int sum,int cur){
if(cur==k){
if(sum==n) cnt++;
return;
}
for(int i=last;sum+i*(k-cur)<=n;i++)dfs(i,sum+i,cur+1);
}
int main(){
scanf("%d%d",&n,&k);
dfs(1,0,0);
printf("%d",cnt);
}