其他分享
首页 > 其他分享> > Luogu P1025 数的划分

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