首页 > 其他分享 >简单/复杂整数划分

简单/复杂整数划分

时间:2023-05-24 13:14:25浏览次数:32  
标签:复杂 int res memset dfs 划分 num 整数 sizeof

这个题我做过类似的题目,没错,又是记忆化搜索,但也不完全是,还是用搜索就可以过,本质也是动态规划

基本上只要会简单的,就会做复杂的,只不过是步骤麻烦点

#include<bits/stdc++.h>
using namespace std;
int n,a[1000010]={1},res=1;
void dfs(int t,int s)//现在的数总和是t,用了s个加号
{
    for(int i=1;i<=t;i++)
        if(i>=a[s-1])//如果符合字典序(即不会重复)
        {
            a[s]=i;
            t-=i;
            if(t==0) res++;//如果是0,就直接加一
            else dfs(t,s+1);
            t+=i;//恢复状态
        }
}
int main()
{
    while(cin>>n)
    {
        res=1;
        memset(a,0,sizeof a);//清空状态;
        dfs(n,1);
        cout<<res<<endl;
    }
}

接下来是复杂的,没啥区别,只是多个判断步骤

#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int n,k,a[N];
int diyige,dierge,disange;//第一个第二个第三个
void judge(int num)//判断函数,看看这个状态属于第几个,注意这里可能一种组合属于多个状态,所以不能直接返回
{
    if(num==k) diyige++;
    bool f=false;
    for(int i=1;i<=num;i++)
        for(int j=1;j<=num;j++)
            if(i!=j&&a[i]==a[j])
            {
                f=true;
                break;
            }
    if(!f) dierge++;
    f=false;
    for(int i=1;i<=num;i++)
        if(a[i]%2==0&&a[i]!=1)
        {
            f=true;
            break;
        }
    if(!f) disange++;
}
void dfs(int x,int num)
{
    for(int i=1;i<=x;i++)
        if(i<=n&&i>=a[num-1])
        {
            a[num]=i;
            x-=i;
            if(x==0) judge(num);
            else dfs(x,num+1);
            x+=i;
        }
}
int main()
{
    while(cin>>n>>k)
    {
        memset(a,0,sizeof a);
        diyige=0,dierge=0,disange=0;
        //memset(vis,false,sizeof vis);
        dfs(n,1);
        cout<<diyige<<endl;
        cout<<dierge<<endl;
        cout<<disange<<endl;
    }
    return 0;
}

 

;

标签:复杂,int,res,memset,dfs,划分,num,整数,sizeof
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17427983.html

相关文章

  • 数据转换-整数字节数组
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1参考《GMT0009-2012SM2密码算法使用规范》第6节“数据转换”在utils.h和utils.c中完成整数与8位字节串的转换功能(10'):intInt2ByteArr(unsignedinti,unsignedchar*ba);intByteArr2Int(unsignedchar*......
  • 数据转换-整数字节数组
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1参考《GMT0009-2012SM2密码算法使用规范》第6节“数据转换”在utils.h和utils.c中完成整数与8位字节串的转换功能(10'):intInt2ByteArr(unsignedinti,unsignedchar*ba);intByteArr2Int(unsignedchar*ba......
  • Java Object 划分
    Object划分1.PO(persistantobject)持久对象PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。2.DO(DomainObject)领域对象就是从现实世界中抽象出来的有形或无形的业务实体。3.TO(TransferObject),数据传输对象不......
  • Nginx 可视化神器!复杂配置一键生成,监控管理一条龙!
    功能说明nginxWebUI是一款图形化管理nginx配置的工具,可以使用网页来快速配置nginx的各项功能,包括http协议转发、tcp协议转发、反向代理、负载均衡、静态html服务器、ssl证书自动申请、续签、配置等。配置好后可一建生成nginx.conf文件,同时可控制nginx使用此文件进行启动与重载,完成......
  • 2023-05-22:给定一个长度为 n 的字符串 s ,其中 s[i] 是: D 意味着减少; I 意味着增加。
    2023-05-22:给定一个长度为n的字符串s,其中s[i]是:D意味着减少;I意味着增加。有效排列是对有n+1个在[0,n]范围内的整数的一个排列perm,使得对所有的i:如果s[i]=='D',那么perm[i]>perm[i+1],以及;如果s[i]=='I',那么perm[i]<perm[i+1]。返回有效排列......
  • 复杂链表的复制
       ......
  • 领域驱动设计-软件核心复杂性应对之道:第七章
    第七章使用语言:一个扩展的实例7.1货物运输系统简介1)跟踪客户货物的主要处理部署2)事先预约货物3)当货物到达其处理过程中的某个位置时,自动向客户寄送发票一个货物从货主手上通过托运公司运输货物,从起始点到目的地,托运公司(可能只负责一段路途,再由合作伙伴/外包/私人等接力)负......
  • 整数缓冲区
    整数缓冲区java预先创建了256个常用的整数包装类型对象。在实际应用中,对已创建的对象进行重复使用。publicclassDemo02{publicstaticvoidmain(String[]args){Integerinteger1=newInteger(100);Integerinteger2=newInteger(100);......
  • 64位整数乘法
    题目描述求a乘b对p取模的值。输入格式第一行输入整数a,第二行输入整数b,第三行输入整数p。输出格式输出一个整数,表示a*bmodp的值。数据范围1≤a,b,p≤10^18输入样例345输出样例2分析考虑到a,b,p的数据范围都非常大,无法直接先取模再相乘计算,由于可......
  • 皕杰报表+DataEase,中式复杂报表与数据可视化的完美组合
    在商业智能解决方案中,数据的展现及业务规律的呈现是商业智能中极其重要的组成部分。长久以来,由于数据源复杂多样性,以及中国传统文化的对于数据表格的工整、对称等等的影响下,报表工具一直担当着商业智能的数据展现中主角的位置;最近随着显示屏技术的发展、大屏价格的下调,数据大屏及数......