cggwz  

题目链接:数的划分
这题直接搜索就行了。给代码,思路没什么好讲的,要讲的放在代码后面:

#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,因为我们这里为了不重复,我们构造的是不减划分,所以得保证这一点,同时这也起到剪枝的作用。

posted on 2017-08-25 00:21  cggwz  阅读(146)  评论(0)    收藏  举报