[ABC184F] Programming Contest题解
前置知识
meet in middle (折半搜索)
会的大佬请跳过
不会的请自己前往oi wiki或CSDN(百度吧,少年)
解题思路
纯暴力
看完题目考虑将每一种情况计算出来,排序后找不超过T的最大值
因为每个数有(选/不选)两种情况
所以总共2^n种结果
显而易见,时间复杂度 O(2^n)
n=40时,显然会G
正解
引出
暴力思路告诉我们,现在需要一种优秀的算法(奇技淫巧)来帮助我们
从庞大的信竞知识中,我们找到了折半搜索;
步骤
- 将数据分成2组,1到n/2一组,n/2+1到n为一组
- 每组单独算情况,存在数组中
- 两个结果数组单独排序(升序)
- a指针从第一组结果数组的第一个元素,b指针从第二组结果数组的最后一个元素(没学过指针怎么办?变量模拟即可,详见代码)
- 如果两个元素之和大于T,b--
- 否则用元素之和更新答案(正确性显然,自己思考)
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题解的更多相关文章
- 2015 Syrian Private Universities Collegiate Programming Contest 题解
题目在这里>_< 发现这场比赛在网上没有完整的题解,甚至连题目代码都没人贴出来(大概是因为题目太水了吧...).所以宝宝就来写个题解,也就当作成长记录了233333 A. Window 题 ...
- 2015 ACM Amman Collegiate Programming Contest 题解
[题目链接] A - Who Is The Winner 模拟. #include <bits/stdc++.h> using namespace std; int T; int n; s ...
- 2013-2014 ACM-ICPC Brazil Subregional Programming Contest 题解
[题目链接] 这场比赛题面英文都好长... ... A - Zero or One 模拟. #include <bits/stdc++.h> using namespace std; in ...
- 2017, X Samara Regional Intercollegiate Programming Contest 题解
[题目链接] A - Streets of Working Lanterns - 2 首先将每一个括号匹配串进行一次缩减,即串内能匹配掉的就匹配掉,每个串会变成连续的$y$个右括号+连续$z$个左括号 ...
- 2017 ACM Amman Collegiate Programming Contest 题解
[题目链接] A - Watching TV 模拟.统计一下哪个数字最多即可. #include <bits/stdc++.h> using namespace std; const in ...
- The 2015 China Collegiate Programming Contest Game Rooms
Game Rooms Time Limit: 4000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- Programming Contest Ranking(题解)
Programming Contest Ranking . 题目描述 Heilongjiang Programming Contest will end successfully! And your ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- M-SOLUTIONS Programming Contest 2020 题解
M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...
- 2016 Sichuan Province Programming Contest
2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...
随机推荐
- vue+vant实现省市联动(van-area)组件(包含比较全面的全国省市数组数据)
组件库太香了,人家nb,自己写的都是** 效果: 1.安装vant库以及main.js的配置 2.一般结合van-popup组件 </template> <van-popup v-m ...
- python3解析FreeSWITCH会议室列表信息
操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Python版本:3.9.12 进行FreeSWITCH会议室相关功能开发过程中,会遇到需要解析会议室列表信息并进行 ...
- 二:飞凌嵌入式FCU1201
场景一 充电基础设施 场景二 现代机械加工对复杂化.精密化.大型化以及自动化设备的要求不断提高,数控机床设备日益得到广泛应用.数控机床设备对加工质量及效率起着关键乃至核心作用,其造价往往相当昂贵.因此 ...
- 如何基于surging跨网关跨语言进行缓存降级
概述 surging是一款开源的微服务引擎,包含了rpc服务治理,中间件,以及多种外部协议来解决各个行业的业务问题,在日益发展的今天,业务的需求也更加复杂,单一语言也未必能抗下所有,所以在多语言行业解 ...
- (更新中)Python、JavaScript、Java和C++语言的语法对比与梳理
目录 引言 1. 构造函数 Python JavaScript Java C++ 2. 构造类 Python JavaScript Java C++ 3. 总结 引言 在开发过程中不免需要用到多种编程 ...
- Docker基础 ubuntu安装docker
目录 如何在Linux深度系统deepin下安装docker 介绍 安装docker 在ubuntu的docker中运行ubuntu 在ubuntu的docker中运行centos 卸载docker ...
- ansible系列(30)--ansible的role详解
目录 1. Ansible Roles 1.1 roles目录结构 1.2 roles编写步骤 1.2.1 编写基本的roles 1.2.2 roles的调用 1.2.3 roles中使用变量 1.2 ...
- 如何修改npm包源码后,重新npm包的时候能是修改后的版本
肯定是clone一份到gitHub啦 保存一份修改后的npm包到自己的私有库 npm 安装 git 仓库的方式 npm install <git remote url> 例如 npm in ...
- VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?
看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...
- 网络数据流分析工具TcpEngine V1.0.0教程-1
概述 目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析:另一类是原始网络数据包的监听分析,如Wireshark,这类工具擅长分析网络 ...