题目链接:数的划分
这题直接搜索就行了。给代码,思路没什么好讲的,要讲的放在代码后面:
#include<bits/stdc++.h>
using namespace std;
int dfs(int n,int k,int cur){
if(k==1){
return 1; //1
}
int ans=0;
for(int i=cur;i*k<=n;i++){ //2
ans+=dfs(n-i,k-1,i);
}
return ans;
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
printf("%d",dfs(n,k,1));
return 0;
}
讲两处:
1处:如果剩余一次操作,直接返回1。
2处:注意条件,i*k<=n,因为我们这里为了不重复,我们构造的是不减划分,所以得保证这一点,同时这也起到剪枝的作用。