前置知识

meet in middle (折半搜索)

会的大佬请跳过

不会的请自己前往oi wiki或CSDN(百度吧,少年)

解题思路

纯暴力

  看完题目考虑将每一种情况计算出来,排序后找不超过T的最大值

  因为每个数有(选/不选)两种情况

  所以总共2^n种结果

  显而易见,时间复杂度 O(2^n)

  n=40时,显然会G

正解

引出

暴力思路告诉我们,现在需要一种优秀的算法(奇技淫巧)来帮助我们

从庞大的信竞知识中,我们找到了折半搜索;

步骤

  1. 将数据分成2组,1到n/2一组,n/2+1到n为一组
  2. 每组单独算情况,存在数组中
  3. 两个结果数组单独排序(升序)
  4. a指针从第一组结果数组的第一个元素,b指针从第二组结果数组的最后一个元素(没学过指针怎么办?变量模拟即可,详见代码)
  5. 如果两个元素之和大于T,b--
  6. 否则用元素之和更新答案(正确性显然,自己思考)

    AC代码

    #include <bits/stdc++.h>
    using namespace std;
    long long n,t,mx,sz[42],a[1050000],b[1050000],tota,totb;
    void dfs(int qd,int zd,int lim,long long zhi)
    {
    if(qd>zd)return ;
    if(zhi+sz[qd]>t)
    {
    dfs(qd+1,zd,lim,zhi);
    return;
    }
    if(lim==1)a[++tota]=zhi+sz[qd];
    else b[++totb]=zhi+sz[qd];
    dfs(qd+1,zd,lim,zhi);
    dfs(qd+1,zd,lim,zhi+sz[qd]);
    return;
    }
    int main()
    {
    scanf("%lld%lld",&n,&t);
    for(int i=1;i<=n;i++)
    {
    scanf("%lld",&sz[i]);
    }
    dfs(1,n/2,1,0);
    dfs(n/2+1,n,2,0);
    sort(a+1,a+tota+1);
    sort(b+1,b+totb+1);
    int zz=1,yz=totb;
    while(zz<=tota&&yz>=1)
    {
    while(a[zz]+b[yz]>t)yz--;
    if(yz<1)break;
    if(a[zz]+b[yz]>mx)mx=a[zz]+b[yz];
    zz++;
    }
    printf("%lld\n",max(mx,max(a[tota],b[totb])));
    return 0;
    }

    写在最后

    求审核放过孩子的第一篇正经题解

欢迎各位大佬评论区指点一二,三克油

[ABC184F] Programming Contest题解的更多相关文章

  1. 2015 Syrian Private Universities Collegiate Programming Contest 题解

    题目在这里>_< 发现这场比赛在网上没有完整的题解,甚至连题目代码都没人贴出来(大概是因为题目太水了吧...).所以宝宝就来写个题解,也就当作成长记录了233333 A. Window 题 ...

  2. 2015 ACM Amman Collegiate Programming Contest 题解

    [题目链接] A - Who Is The Winner 模拟. #include <bits/stdc++.h> using namespace std; int T; int n; s ...

  3. 2013-2014 ACM-ICPC Brazil Subregional Programming Contest 题解

    [题目链接] 这场比赛题面英文都好长... ... A - Zero or One 模拟. #include <bits/stdc++.h> using namespace std; in ...

  4. 2017, X Samara Regional Intercollegiate Programming Contest 题解

    [题目链接] A - Streets of Working Lanterns - 2 首先将每一个括号匹配串进行一次缩减,即串内能匹配掉的就匹配掉,每个串会变成连续的$y$个右括号+连续$z$个左括号 ...

  5. 2017 ACM Amman Collegiate Programming Contest 题解

    [题目链接] A - Watching TV 模拟.统计一下哪个数字最多即可. #include <bits/stdc++.h> using namespace std; const in ...

  6. The 2015 China Collegiate Programming Contest Game Rooms

    Game Rooms Time Limit: 4000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. Programming Contest Ranking(题解)

    Programming Contest Ranking . 题目描述 Heilongjiang Programming Contest will end successfully! And your ...

  8. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  9. M-SOLUTIONS Programming Contest 2020 题解

    M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...

  10. 2016 Sichuan Province Programming Contest

    2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...

随机推荐

  1. ruby on rails中sidekiq的使用

    参考文章: https://www.jianshu.com/p/7ea473097023 安装redis 配置redis 配置sidekiq所依赖的redis位置,必须同时定义sidekiq的serv ...

  2. 联想G470安装黑苹果

    macos10136 黑苹果usb无线网卡 1.系统下载: 下面是我自制的带clover 4596版本的u盘镜像: 链接: https://pan.baidu.com/s/1wRdVddwkei7bf ...

  3. [BZOJ4358]permu线段树+莫队

    先放代码 晚上补(争取) [BZOJ4358]permu 线段树+莫队做法 序列操作,多次询问,无修,标准的莫队. 在如何在不同区间内转移的问题上,我选择用线段树来维护(没听xfg讲回滚莫队不行啊) ...

  4. SR-IOV 网卡虚拟化技术

    目录 文章目录 目录 PCI 与 PCIe 设备 SR-IOV 在 KVM 中启用 SR-IOV 网卡 手动挂载 VF 到虚拟机 指令方式挂载 SR-IOV 的数据包分发机制 PCI 与 PCIe 设 ...

  5. PageOffice6 实现 word 全文检索

    在文档服务器中存储有成千上万个文档的情况下,用户想要找到并打开包含特定关键字的文档,无疑是一项艰巨的任务.如何高效地管理和检索大量的Word文档呢? 在现有的技术解决方案中,许多方法都依赖于服务器端的 ...

  6. ES集群的扩缩容

    ES集群节点的扩容缩容案例 1.在集群中添加和删除节点 当您启动Elasticsearch实例时,您正在启动一个节点.Elasticsearch集群是一组具有相同cluster.name属性的节点.当 ...

  7. 【C#】初次使用webapi的体会

    webapi controller 要继承 ApiController   重写权限验证 ,记得使用 System.Web.Http下的AuthorizeAttribute.   webapi默认路由 ...

  8. 阿里巴巴 MySQL 数据库之索引规约 (二)

    索引规约 强制部分 [强制] 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引. 说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的:另外 ...

  9. CTFshow-Crypto(1-5)

    1密码学签到 自己倒序 在线网站倒序 文字倒序工具,在线文字倒序 (qqxiuzi.cn) python脚本 a = '}wohs.ftc{galf' print(a[::-1], end=" ...

  10. win11启动虚拟机出现蓝屏

    win11虚拟机启动出现蓝屏 问题 我的电脑是win11系统,最近在安装vmware后装了centos7.6,发现一启动centos,电脑就出现蓝屏,如图 解决 这个问题搞了好久,最终发现是win11 ...