前置知识

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. vue下获得经纬度省市区

    1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...

  2. 【GUI软件】小红书指定博主批量采集笔记,支持多博主同时采集!

    目录 一.背景介绍 1.1 爬取目标 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景介绍 1.1 爬取目标 ...

  3. Linux下的目录

    FHS 因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰. 你能想象,你进入一个企业 ...

  4. Ubuntu虚拟机ROS的安装与使用

    ROS安装 直达链接 安装ROS2 使用鱼香ROS的一键安装: wget http://fishros.com/install -O fishros && bash fishros 进 ...

  5. C语言:如何让printf输出更加美化(用游戏英雄属性作例子)

    #include <stdlib.h> /* run this program using the console pauser or add your own getch, system ...

  6. C# 程序集、模块和类型概念及关系

    目录 C# 程序集.模块和类型概念及关系 概述 程序集 模块 类型 程序集.模块和类型的关系 总结 引用 C# 程序集.模块和类型概念及关系 概述 在 C# 中,程序集.模块和类型是构成 .NET 应 ...

  7. 整理C语言预处理过程语法的实用方法与技巧

    预处理 目录 预处理 一.宏定义 数值宏常量 字符串宏常量 用define宏定义注释符号? 程序的编译过程 预处理中宏替换和去注释谁先谁后? 如何写一个不会出现问题的宏函数 do-while-zero ...

  8. WPF绑定数据源到ListBox等selector的注意事项

    如果使用CollectionViewSource绑定到控件上,会导致默认选择第一项,而使用List,SelectedItem就默认为空. 要避免默认选择第一项,就要设置 ListBox.IsSynch ...

  9. 分享一个Objectarx 的凸包算法

    #include "stdafx.h" #include "MyTuBao.h" #include"MathUtil.h" MyTuBao: ...

  10. 使用kubadm部署一套k8s学习平台环境

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...