https://www.luogu.com.cn/problem/P1025

2021-01-28 05:15

阅读:555

标签:str   string   hit   nbsp   new   ast   ios   最大   family   

#include
#include
using namespace std;
int num[200],N,k,totalnum=0;//num保存每个数的数量
int show(){//显示目前的分法
    for(int i=1;i
        if(num[i]>0)cout"="num[i]" ";
    }
    return 0;
}
int f(int indis,int lastnum,int totalnow){
    //首先我发现所有的分法里,分的后一个数不应该小于上一个数
    if(indis1){//如果选的数非最后一个数
        for(int i=0;i//如果没有可选数(前面的数加起来就>=总和了)就无法继续
            num[lastnum+i]+=1;//从0开始,比上个数依次加到可选的最大的
            f(indis+1,lastnum+i,totalnow+lastnum+i);
            num[lastnum+i]-=1;//撤销,进行下一次
        }
    }else if(indis==k-1){//如果选的是最后一个数
        int temp=N-totalnow;
        if(temp>=lastnum){//如果必须选的数比上个数大
            num[temp]+=1;
            totalnum+=1;
            //show();cout
            num[temp]-=1;//该不会不需要吧
        }
    }
    return 0;
}
int main(){
    //memset(num,0,4*200);
    cin>>N>>k;
    f(0,1,0);
    cout
    return 0;
}

https://www.luogu.com.cn/problem/P1025

标签:str   string   hit   nbsp   new   ast   ios   最大   family   

原文地址:https://www.cnblogs.com/forwhat00/p/13214205.html

上一篇:MVC控制器路由

下一篇:前端Json换行显示


评论


亲,登录后才可以留言!