AtCoder Regular Contest 100 (ARC100) E - Or Plus Max 其他
原文链接https://www.cnblogs.com/zhouzhendong/p/9251448.html
题目传送门 - ARC100E
题意
给定一个正整数 $n(n\leq 18)$。
然后给定一行共 $2^n$ 个正整数 $a_0,a_1,\cdots,a_{2^n-1}$ 。
对于每一个 $k(1\leq k<2^n)$ ,输出满足 $i\ OR\ j \leq k$ 的最大 $a_i+a_j$ 值。
题解
看到这题的心情:为啥不早做这题!!这题过的人怎么这么少??
连我都只想了几分钟,那么那些大佬是不是都一眼秒?
好了讲题:
考虑对于每一个 $k$ 处理出满足 $k\ OR\ x=k$ 的所有 $x$ 中 $a_x$ 最大的两个。其中 $k=0$ 的时候特殊一点注意一下。
具体怎么求???
考虑一个 $k$ 要处理的东西,可以从两个方面继承:一个是自己本身的数 $a_k$ ,另一部分是把 $k$ 的任意一个非零位换成 $0$ 得到的 $k^{\prime}$ 的结果。
然后回到原题,弄个前缀 $\max$ 就好了。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1<<19;
int n,s,a[N];
int id[N][2];
bool cmp(int A,int B){
return a[A]<a[B];
}
int main(){
scanf("%d",&n);
s=1<<n;
for (int i=0;i<s;i++)
scanf("%d",&a[i]);
a[s]=-1;
id[0][0]=0,id[0][1]=s;
for (int i=1;i<s;i++){
id[i][0]=i,id[i][1]=s;
int x[4];
for (int j=0;j<n;j++)
if (i&(1<<j)){
int _i=i^(1<<j);
x[0]=id[i][0],x[1]=id[i][1];
x[2]=id[_i][0],x[3]=id[_i][1];
sort(x,x+4,cmp);
id[i][0]=x[3],id[i][1]=x[2]==x[3]?x[1]:x[2];
}
}
int mx=0;
for (int i=1;i<s;i++){
mx=max(mx,a[id[i][0]]+a[id[i][1]]);
printf("%d\n",mx);
}
return 0;
}
AtCoder Regular Contest 100 (ARC100) E - Or Plus Max 其他的更多相关文章
- AtCoder Regular Contest 100 (ARC100) D - Equal Cut 二分
原文链接https://www.cnblogs.com/zhouzhendong/p/9251420.html 题目传送门 - ARC100D 题意 给你一个长度为 $n$ 的数列,请切 $3$ 刀, ...
- AtCoder Regular Contest 100 Equal Cut
Equal Cut 思路: 枚举中间那个分界点,然后两边找使得切割后差值最小的点,这个可以用双指针 代码: #include<bits/stdc++.h> using namespace ...
- AtCoder Regular Contest 100 E - Or Plus Max
一道很好的dp题 dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai 这样dp[K]统计的两个数肯定满足(i | j) <= K 然后不断做 update(dp[i | (1&l ...
- AtCoder Regular Contest 100
传送门 C - Linear Approximation 题意: 求 \[ \sum_{i=1}^nabs(A_i-(b+i)) \] \(A_i,b\)给出. 思路: 将括号拆开,变为\(A_i-i ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
随机推荐
- js实现两种排序算法——冒泡、快速排序
* 一:冒牌排序1思想:冒泡排序思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置要实现上述规则需要用到两层for循环,外层从第一个数到倒数第二个数,内层从 ...
- springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- Vue项目构建开发笔记(vue-lic3.0构建的)
1.router.js里面 { path: '/about', name: 'about', // route level code-splitting // this generates a sep ...
- 关于《common-net》的ftp上传
1:jar的maven的引用: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...
- ionic3 使用html2canvas将数据导出为图片,并下载本地
1.安装html2canvas npm install --save html2canvas 官方网站 https://html2canvas.hertzen.com/ 2.在需要的组件中引入html ...
- python并发编程之进程池,线程池,协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
这题用直接枚举是超时的,必须要用搜索来搜索出所有可能的状态,然后再进行枚举 这是较慢的做法 /* 方格取数,相邻格子的数不可取,问最多取到的和是什么 有点类似炮兵布阵,先打出所有可能的状态,然后dp[ ...
- OrCAD Capture CIS 16.6 导出BOM
OrCAD Capture CIS 16.6 一.选择设计文件:菜单:Tools > Bill of Materials... 二.Bill of Materials > Open in ...
- python发送邮件(在邮件中显示HTMLTestRunner生成的报告)
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart f ...
- 论文阅读笔记二十九:SSD: Single Shot MultiBox Detector(ECCV2016)
论文源址:https://arxiv.org/abs/1512.02325 tensorflow代码:https://github.com/balancap/SSD-Tensorflow 摘要 SSD ...