[NOIP2001]数的划分

思路

dfs的简单题,数据很弱,注意每次减的数都比上一次当要大,分的方式就不会重复了;方案数+1的条件是n减k个数后刚好等于零(也可以理解为k个非递减的数之和等于n)

代码

#include<bits/stdc++.h>
using namespace std;

int n,k,ans=0;

void dfs(int lf_num,int num,int lf_cnt){
    if(!lf_cnt){
        if(!lf_num) ans++;
        return;
    }
    for(int i=num;i<=lf_num;i++){
        dfs(lf_num-i,i,lf_cnt-1);
    }
}

int main(){
    scanf("%d%d",&n,&k);
    dfs(n,1,k);
    cout<<ans<<endl;
    return 0;
}