博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtCoder Regular Contest 100 E - Or Plus Max
阅读量:5164 次
发布时间:2019-06-13

本文共 944 字,大约阅读时间需要 3 分钟。

一道很好的dp题

dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai
这样dp[K]统计的两个数肯定满足(i | j) <= K
然后不断做 update(dp[i | (1<<j)], dp[I])

#include 
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = 262200;const ll INF = 1e18;int A[N];pair
dp[N];void update(pair
&A, int x) { if(x > A.second) { A.second = x; if(A.second > A.first) { swap(A.second, A.first); } }}int main() { int n; while(~scanf("%d", &n)) { int nLen = (1<
> i) & 1) == 0 ) { int newI = j | (1 << i); int t1 = dp[j].first; int t2 = dp[j].second; update(dp[newI], t1); update(dp[newI], t2); } } } // for(int i = 0; i <= nLen; ++i) printf("%d %d\n", dp[i].first, dp[i].second); int ans = -1; for(int i = 1; i <= nLen; ++i) { ans = max(ans, dp[i].first + dp[i].second); printf("%d\n", ans); } } return 0;}

转载于:https://www.cnblogs.com/Basasuya/p/9277242.html

你可能感兴趣的文章
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>