数的划分

就是给你一个数和划分为的几份(都不为空),看看有几种划分方案

刚开始做TLE两个点,我在想好像只要枚举到倒数第二层就可以了,最后一曾可以直接减,这样的剪枝

然后失败了..
看了题解,可以这样做剪枝:加上限制条件

复制代码
#include<iostream>
using namespace std;
const int N=50;
int res,n,k;
void dfs(int u,int start,int sum)//深度 开始 当前数的总和 
{
    if(u==k&&sum!=n) return;
    if(u!=k&&sum==n) return ;
    if(u==k&&sum==n)
    {
        res++;
        return ;
    }
    for(int i=start;sum+i*(k-u)<=n;i++)//因为不重复就需要递增或者递减,如果递增,那后面的数字必然<=现在的,所以就需要满足这个条件就可以了
        dfs(u+1,i,sum+i);
}
int main(){
    cin>>n>>k;
    dfs(0,1,0);
    cout<<res;
    return 0;
}
复制代码
复制代码
#include<iostream>
using namespace std;
const int N=50;
int res,n,k;
void dfs(int u,int start,int sum)//深度 开始 当前数的总和 
{
    if(u==k&&sum!=n) return;
    if(u!=k&&sum==n) return ;
    if(u==k&&sum==n)
    {
        res++;
        return ;
    }
    for(int i=start;i<n;i++)//直接是数字 
    {
        if(sum+i<=n)
            dfs(u+1,i,sum+i);
        else return ;
    }
}
int main(){
    cin>>n>>k;
    dfs(0,1,0);
    cout<<res;
    return 0;
}
复制代码

**************有空更新dp类解法

posted @   小志61314  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示