arc_100E Or Plus Max

开源onlyoffice编译完整过坑版 onlyoffice 编译过坑完整版; 阅读详情

传送门
在这里插入图片描述


Solution

首先答案可以转化成
A n s k = m i n i &lt; = k m i n a , b , a ∣ b = i , a ! = b A [ a ] + A [ b ] Ans_{k}=min_{i&lt;=k}min_{a,b,a|b=i,a!=b}A[a]+A[b] Ansk​=mini<=k​mina,b,a∣b=i,a!=b​A[a]+A[b]
其实这东西就像 F M T FMT FMT
而 F M T FMT FMT有实际上是在 d p dp dp
设 f [ i ] [ j ] [ 2 ] f[i][j][2] f[i][j][2]表示 ( k ∣ i = i ) A [ k ] (k|i=i)A[k] (k∣i=i)A[k]的最小值和次小值(这个题可以记录位置)
当然还有另一个限制条件就是,数字k的二进制下前 j j j位随便,后面的几位必须和 i i i一样
显然 f [ i ] [ n ] [ 1 ] + f [ i ] [ n ] [ 0 ] = m i n a , b , a ∣ b = i , a ! = b A [ a ] + A [ b ] f[i][n][1]+f[i][n][0]=min_{a,b,a|b=i,a!=b}A[a]+A[b] f[i][n][1]+f[i][n][0]=mina,b,a∣b=i,a!=b​A[a]+A[b]
然后考虑怎么把这个东西求出来
如果数字 i i i的第 j j j位是 0 0 0那么 f [ i ] [ j − 1 ] − &gt; f [ i ] [ j ] f[i][j-1]-&gt;f[i][j] f[i][j−1]−>f[i][j]
否则
f [ i ] [ j − 1 ] 和 f [ i − ( 1 &lt; &lt; j ) ] [ j − 1 ] − &gt; f [ i ] [ j ] f[i][j-1]和f[i-(1&lt;&lt;j)][j-1]-&gt;f[i][j] f[i][j−1]和f[i−(1<<j)][j−1]−>f[i][j]
因为对于第 j j j位 f [ i ] [ j − 1 ] f[i][j-1] f[i][j−1]考虑了第 j j j位一定取 1 1 1的情况, f [ i − ( 1 &lt; &lt; j ) ] [ j − 1 ] f[i-(1&lt;&lt;j)][j-1] f[i−(1<<j)][j−1]考虑了第 j j j位一定取 0 0 0的情况。
合并怎么方便怎么来好了。

#include<bits/stdc++.h>
using namespace std;
int read(){
	int rt=0;char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9'){rt=rt*10+ch-'0';ch=getchar();}
	return rt;
}
int n,a[1<<18];
struct _{
	int v[2];
}data[1<<18];
bool cmp(int x,int y){
	return a[x]<a[y];
}
_ Merge(_ x,_ y){
	_ ret;
	ret.v[0]=ret.v[1]=-1;
	int buf[5],tot=0;
	for(int i=0;i<2;i++)
		if(x.v[i]!=-1){
			buf[++tot]=x.v[i];
		}
	for(int i=0;i<2;i++){
		if(y.v[i]!=-1){
			buf[++tot]=y.v[i];
		}
	}
	sort(buf+1,buf+1+tot);
	tot=unique(buf+1,buf+1+tot)-buf-1;
	sort(buf+1,buf+1+tot,cmp);
	for(int i=0;i<2;i++){
		if(tot>0){
			ret.v[i]=buf[tot--];
		}
	}
	return ret;
}
int main(){
	n=read();
	int m=n;
	n=(1<<n);
	for(int i=0;i<n;i++){
		a[i]=read();
		data[i].v[0]=i;
		data[i].v[1]=-1;
	}
	for(int i=0;i<m;i++){
		for(int j=n-1;j>=0;j--){
			if(j&(1<<i)){
				data[j]=Merge(data[j],data[j^(1<<i)]);	
			}
		}
	}
	int ans = 0;
	for(int i=1;i<n;i++){
		
		if(data[i].v[0]+1 && data[i].v[1]+1){
			ans = max(ans,a[data[i].v[0]]+a[data[i].v[1]]);
		}
		printf("%d\n",ans);
	}
	return 0;
}
通过Netlink检测网线插拔 Android/Linux通过netlink编程检测网线插拔。 阅读详情

相关推荐

双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码)

​上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法,这篇博客将介绍使用yalmip的双层优化问题的求解方法。 1.KKT函数 通过调用yalmip工具箱中的KKT函数,可以直接求出优化问题的KKT条件,省去自己手动写的步骤。 2.solvebilevel函数 solvebilevel是yalmip工具箱内置的求解双层优化问题的函数。也就是通过这个函数,不需要咱手动写KKT条件,也不需要使用KKT函数,直接把上、下层优化的目标函数、约束条件往里面一放,就能求出结果。 ​

配电网和matlab的博客 1万+

ATCODER:Or Plus Max(二进制递推)

E - Or Plus MaxTime limit : 2sec / Memory limit : 1024MBScore : 700 pointsProblem StatementThere is an integer sequence of length 2N: A0,A1,…,A2N−1. (Note that the sequence is 0-indexed.)For every int...

junior19的博客 633

内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)

DRAM,全称为 Dynamic Random Access Memory ,中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的,芯片世界里还有一种 SRAM 静态随机存取存储器的存在。笼统地说,DRAM 的结构比 SRAM 更简单,面积占用更小,适合制作大容量的存储芯片;而 SRAM 结构复杂一些,一般使用六个晶体管,面积消耗大,但是读写速度快,而且因为 SRAM 只用到晶体管,所以在工艺上和逻辑芯片相兼容,我们可以在逻辑芯片上直接集成 SRAM。

呆呆象呆呆的博客 2万+

高维前缀和和子集dp(状压dp的一种)

至于第二种写法,详细的解释可以看这篇博客-->)我们今天要解决的是这样一个问题:也就是求出对于每个i,在二进制下j∈i的所有子集的和.要解决这个问题,我们可以直接枚举子集计算,时间复杂度是.然而,我们可以参照二维前缀和的实现,利用高维前缀和优化成.类似的,我们也可以求出超集和:,也就是后缀和.动态规划中,有一种问题就是基于高维前缀和的,也就是子集dp.一般以位运算的形式呈现....

CK1513710764的博客 1240

【论文复现】HiDDeN:Hiding Data With Deep Networks

(标签)是 float 类型,但代码中传入的是 long 类型(整数标签)。函数参数解析方式变化,导致无法正确保存生成的图像结果。这是因为新版torchvision的。使用预训练模型进行隐写和提取测试。HiDDeN支持多种噪声层组合。打印变量的类型,分别是。

qq_69146676的博客 971

B站充电视频下载器(需配合会员Cookie使用,仅供学习交流,Python)

这个程序是一个用于下载B站充电视频的工具,依赖于用户提供的会员Cookies。

qq_40753021的博客 2万+

【洛谷】【ARC100E】Or Plus Max(高维前缀和)

给你一个长度为 2n 的序列 a,每个1≤K≤2n−1,找出最大的 ai​+aj​(iorj≤K,0≤i<j<2n)并输出。 or 表示按位或运算。输入 #1 2 1 2 3 1 输出 #1 3 4 5 输入 #2 3 10 71 84 33 6 47 23 25 输出 #2 81 94 155 155 155 155 155 输入 #3 4 75 26 45 72 81 47 97 97 2 2 25 82 84 17 56 32 输出 #3 101 120 147 156 156 178

2301_80024649的博客 611

别再硬啃理论了!用Simulink双脉冲实验,5分钟搞懂MOSFET二极管反向恢复

本文通过Simulink双脉冲实验仿真,帮助电力电子学习者快速理解MOSFET二极管反向恢复特性。文章详细介绍了实验搭建步骤、关键参数配置及波形解析,将抽象理论转化为可视波形,大幅提升学习效率。特别适合需要直观理解反向恢复过程的工程师和学生。

weixin_30918633的博客 955

AtCoder Regular Contest 100 E:Or Plus Max(DP+位运算)解题报告

这题对于我来说是真的难。。。 点击这里进入题目 题目大意:言简意赅。2的N次方个数,存为Ai,令1≤K≤2的N次方−1,请你求出(i,j),使Ai+Aj最大,并且0<=i< j<=2的N次方-1且(i or j)≤K。输出Ai+Aj的最大值。 思路:这一题长得是真的不像DP。 这道题虽然言简意赅,但大部分都是为了严谨,我们最...

aoke1952的博客 250

扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

智能体 = 角色设定 + 提示词 + 变量输入一个好提示词的核心是结构、风格和复用性创建后可以一键发布成网页应用、对话助手整个过程0代码,只靠配置,人人可学,人人可用四、进阶一:理解「工作流」的威力如果你已经用扣子创建了几个简单的智能体,比如写个爆款小红书文案、生成一段短视频脚本,那恭喜你已经入门。但如果你还停留在“一个智能体 = 一段提示词”的层级,你离真正的智能体生产力革命,还差一步:学会搭建“工作流”——让多个大模型自动协同完成任务。

互联网架构师笔记 3501

【RTD】AD7793驱动程序

AD7793完整驱动程序,支持两线、三线、四线RTD。

只要思想不滑坡,想法总比问题多。 6173

ARC100E Or Plus Max

据说这玩意叫 FZT = = 我还以为什么FWT进化的高端玩意然后跑去看了题解然后发现 这特么不就是个DP吗= = 很明显转成前缀最大值就可以了 然后我们对于i可以枚举所有为1的地方变成0的转移 注意判下重【不判你也过不了样例】 然后就做完了= = //Love and Freedom. #include<cstdio> #include<cstring> ...

weixin_33796205的博客 179

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

[ARC100E] Or Plus Max 题解

则我们可以考虑运用 SOSDP(高位前缀和),设。若把二进制数看为一个集合,则我们称二进制数。的最大值和次大值,则实际上可以将其看作为。维的 DP 进行了状态压缩,每一维只有。因此,我们应当先枚举维数。而由于我们要求的答案。,则可以将其转化为求。

OIer_Cosmos的博客 1112

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ARC 100 E - Or Plus Max

https://atcoder.jp/contests/arc100/tasks/arc100_c 问题可以转化为f[k]=max(a[i]+a[j])(i|j==k),那么答案就是f[k]的前缀最大值 于是用高维前缀和就可以做了,枚举每一个j=0-n,如果i>>j&1,那么用i^(1<<j)的值去更新i位置上的值因为i^(1<<j)也是i的子集,i的两个子集或起来还是i的子集 #include<bits/stdc++.h> using nam

binarycopycode 326

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ARC100E Or Plus Max(枚举子集)

题目链接 思路: n2n^2n2算法很好得出,枚举每一个i j更新k,跑一遍前缀和 思考优化,即如何快速得出k,考虑枚举每个i的母集,更新该母集所包含子集的最大值,并更新k,复杂度就是枚举子集的复杂度3log(n)3^{log(n)}3log(n) 代码如下: #include<bits/stdc++.h> #define inf 1ll<<62 using namespace std; int n; int a[300010]; int max1[300010],ans[3000

diabolusexnihil的博客 420

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[ARC100E] Or Plus Max 题解 SOS dp

的子集 , 我们用 sos (多维前缀和) 求出所有状态的最大值和次大值 , 最终输出。

William_Wang_的博客 527

ARC-100 E - Or Plus Max

题面在这里! 我们如果可以求出 f[x] = max{ a[i] + a[j] , i!=j && i or j == x},那么就可以通过前缀max直接递推答案了。 但是这个玩意不是很好求QWQ 不过 g[x] = max{ a[i] + a[j] , i!=j && i or x == x && j or x ...

weixin_30256505的博客 98

[ARC100]E:Or Plus Max(FZT)

https://arc100.contest.atcoder.jp/tasks/arc100_c 一个很自然的想法是,对于每个K求出i or j=k的所有a[i]+a[j]的最大值ans[k],答案就是ans[]的前缀最大值。 但问题是很难快速找到所有i or j=k的a[i]+a[j]最大值,考虑换一个求法,变为: 对于每个K求出$i\ or\ j \subseteq k$的所有a[i]+...

weixin_30256505的博客 232

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 \...

weixin_30293079的博客 177

AT_arc100_c [ARC100E] Or Plus Max 暴力 + 打表(附优化思路)

一个长度为 500000 (5*10**5),起始下标为1,初始值为 0 的数组,进行 q 次询问,每次询问有两张情况:1.下标为x的数加上y2.查询下标 i 满足 (i%x)== y 的数组元素的和。

ArknightsDoctot的博客 1545

AT_arc100_c [ARC100E] Or Plus Max 高维前缀和(sosdp)

给定一个长度为,起始下标为 0 的数组A,求出满足 i | j <= k()的前提下,的最大值。

ArknightsDoctot的博客 540

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<<j)], dp[I]) #include <iostream> #include <cstring> #include <cstdio> #i...

diankeng5481的博客 193

AtCoder Regular Contest 100 - E Or Plus Max

题目   题意: 给你0-(2^n-1)个数,让你对每一个1&lt;=k&gt;=2^n-1的k,得出a[i]+a[j]最大,要求是i|j&lt;=k。 POINT: 既然要求是i|j&lt;=k,那么前面的答案就一定是后面的答案。 所以对于每一个K,我们要找i|j=k的答案就可以了。 找到k中的有1的数,即(1&lt;&lt;j&amp;k成立),那么(1&lt;&lt;j)^k这...

Mr_Treeeee的博客 489
上一篇: 暑假到底干了什么.LOG
下一篇: CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)
Kvrmnks
博客等级 码龄14年 17粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值