题目链接:点击查看

题目大意:给出 2n2^n2n 个数,编号从 000 开始,现在要求出对于每个 k∈[0,2n)k\in[0,2^n)k∈[0,2n),找到两个下标 (i,j)(i,j)(i,j),满足 i⊕j<=ki \oplus j<=ki⊕j<=k,且 ai+aja_i+a_jai​+aj​ 最大

题目分析:读完题后感觉很乱,因为绕了很多次,分析之后需要发现,i⊕j<=ki \oplus j<=ki⊕j<=k 这个条件,可以表示为 i⊕ji \oplus ji⊕j 一定是 kkk 的子集

所以我们就可以用 SOSdpSOSdpSOSdp 维护一下每个下标最大的两个数值,每次相加即可

转移的话,这个题目是需要从子集向超集转移

注意若 (i,j)(i,j)(i,j) 满足 i⊕j<=ki \oplus j<=ki⊕j<=k,则一定满足 i⊕j<=k+1i \oplus j<=k+1i⊕j<=k+1,所以答案非严格递增

代码:

// Problem: E - Or Plus Max
// Contest: AtCoder - AtCoder Regular Contest 100
// URL: https://atcoder.jp/contests/arc100/tasks/arc100_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) x&-x
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
int fi[N],se[N];
void update(int pos,int val) {if(val>fi[pos]) {se[pos]=fi[pos];fi[pos]=val;} else if(val>se[pos]) {se[pos]=val;}
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;read(n);for(int i=0;i<1<<n;i++) {int x;read(x);update(i,x);}for(int j=0;j<n;j++) {for(int i=0;i<1<<n;i++) {if((i>>j)&1) {//i的维度高于i|(1<<j)的维度update(i,fi[i^(1<<j)]);update(i,se[i^(1<<j)]);}}}int ans=0;for(int i=1;i<1<<n;i++) {ans=max(ans,fi[i]+se[i]);printf("%d\n",ans);}return 0;
}

AtCoder - arc100_c Or Plus Max(SOSdp)相关推荐

  1. leetcode周赛,希望咸鱼,有一天可以薅到羊毛

    进阶指南每日一题地址 atcoder训练地址 leetcode max ratings:2100 碎碎念念 22/4/16 LCP春季杯 LCP 54. 夺回据点 少了个特判...qwq 22/3/6 ...

  2. AtCoder Regular Contest 100 E - Or Plus Max Sos dp

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为2n2^n2n的数组,让你对于所有的1≤k≤2n−11\le k\le 2^n-11≤k≤2n−1求最大的ai+aj,0≤i<j≤2n−1 ...

  3. AtCoder Beginner Contest 215 F - Dist Max 2

    AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x ...

  4. AtCoder Beginner Contest 178 E.Dist Max

    AtCoder Beginner Contest 178 E.Dist Max 题目链接 如果我们知道一个 nnn 维的点,对每一个维度都有一个运算符的话,很明显一共有 2n2^n2n 种运算,而曼哈 ...

  5. AtCoder AGC034D Manhattan Max Matching (网络流)

    题目链接 https://atcoder.jp/contests/agc034/tasks/agc034_d 题解 降智了没想出来建图--(不过这场是真的DE放反了) 注意到曼哈顿距离有一个重要的性质 ...

  6. AtCoder AGC034D Manhattan Max Matching (费用流)

    题目链接 https://atcoder.jp/contests/agc034/tasks/agc034_d 题解 降智了没想出来建图--(不过这场是真的DE放反了) 注意到曼哈顿距离有一个重要的性质 ...

  7. HDU - 6971 K - I love max and multiply sosdp

    传送门 文章目录 题意: 思路: 题意: 思路: 直接求i&j>=ki\And j>=ki&j>=k不是很好求,所以转换成i&j=ki\And j=ki&am ...

  8. AtCoder Beginner Contest 136 E - Max GCD

    Time Limit: 2 sec / Memory Limit: 1024 MB Score : 500 points Problem Statement We have a sequence of ...

  9. 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...

最新文章

  1. linux exec 二程序,二十五、Linux 进程与信号---exec函数
  2. php 中margin-top,css margin-top属性怎么用
  3. java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。
  4. 2013科目三道路驾驶技能通用评判标准
  5. Mybatis(2)---多表查询
  6. homebrew php70,OSX下安装PHP7教程详解
  7. mysql 中文本类型有哪些_mysql数据类型有哪些
  8. MATLAB制作简易小动画入门详解
  9. 查看抽取解压缩和修改war包
  10. 高电平、低电平、高电平有效、低电平有效
  11. Andriod中如何新建lunch项
  12. ndk编译 toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
  13. java hibernate 详解_hibernate详解一
  14. zynq uart0和uart1设置
  15. mom和mes系统有哪些异同点?
  16. Oracle导出导入dmp文件
  17. 计算机软件卡死,电脑运行卡或软件卡死无响应,怎么办?新生必看
  18. 机器学习典型隐私威胁
  19. JavaSE入门0基础笔记 第二章Java基础语法
  20. Linux下进程状态转换,Linux进程状态转换图

热门文章

  1. 被迫学计算机,电脑强迫人学习
  2. 计算机在人力资源管理中的应用浅谈,计算机技术在人力资源管理工作中的应用.doc...
  3. android线程通信方式,Android 主线程和子线程通信问题
  4. MySQL的4大版本
  5. Nginx的events块指令讲解
  6. 简单了解各种序列化技术-XML序列化框架介绍
  7. mybatis-一对一的关联查询有两种配置方式
  8. HandlerMappings
  9. Quartz框架中的Trigger
  10. 循环结构_while循环