[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 ...
随机推荐
- ruby on rails中sidekiq的使用
参考文章: https://www.jianshu.com/p/7ea473097023 安装redis 配置redis 配置sidekiq所依赖的redis位置,必须同时定义sidekiq的serv ...
- 联想G470安装黑苹果
macos10136 黑苹果usb无线网卡 1.系统下载: 下面是我自制的带clover 4596版本的u盘镜像: 链接: https://pan.baidu.com/s/1wRdVddwkei7bf ...
- [BZOJ4358]permu线段树+莫队
先放代码 晚上补(争取) [BZOJ4358]permu 线段树+莫队做法 序列操作,多次询问,无修,标准的莫队. 在如何在不同区间内转移的问题上,我选择用线段树来维护(没听xfg讲回滚莫队不行啊) ...
- SR-IOV 网卡虚拟化技术
目录 文章目录 目录 PCI 与 PCIe 设备 SR-IOV 在 KVM 中启用 SR-IOV 网卡 手动挂载 VF 到虚拟机 指令方式挂载 SR-IOV 的数据包分发机制 PCI 与 PCIe 设 ...
- PageOffice6 实现 word 全文检索
在文档服务器中存储有成千上万个文档的情况下,用户想要找到并打开包含特定关键字的文档,无疑是一项艰巨的任务.如何高效地管理和检索大量的Word文档呢? 在现有的技术解决方案中,许多方法都依赖于服务器端的 ...
- ES集群的扩缩容
ES集群节点的扩容缩容案例 1.在集群中添加和删除节点 当您启动Elasticsearch实例时,您正在启动一个节点.Elasticsearch集群是一组具有相同cluster.name属性的节点.当 ...
- 【C#】初次使用webapi的体会
webapi controller 要继承 ApiController 重写权限验证 ,记得使用 System.Web.Http下的AuthorizeAttribute. webapi默认路由 ...
- 阿里巴巴 MySQL 数据库之索引规约 (二)
索引规约 强制部分 [强制] 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引. 说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的:另外 ...
- CTFshow-Crypto(1-5)
1密码学签到 自己倒序 在线网站倒序 文字倒序工具,在线文字倒序 (qqxiuzi.cn) python脚本 a = '}wohs.ftc{galf' print(a[::-1], end=" ...
- win11启动虚拟机出现蓝屏
win11虚拟机启动出现蓝屏 问题 我的电脑是win11系统,最近在安装vmware后装了centos7.6,发现一启动centos,电脑就出现蓝屏,如图 解决 这个问题搞了好久,最终发现是win11 ...