[codeforces 1365E] Maximum Subsequence Value 或运算+为什么选三个元素对应最大值

本文解析Codeforces Round #648(Div.2) E题,探讨如何从数组中挑选k个数形成新数组,通过二进制位运算找出最大和。关键在于理解max(1,k-2)条件下的最优解策略。

Codeforces Round #648 (Div. 2)  参与排名人数13231

[codeforces 1365E]     Maximum Subsequence Value   或运算+为什么选三个元素对应最大值

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址https://codeforces.com/contest/1365/problem/E

ProblemLangVerdictTimeMemory
E - Maximum Subsequence Value GNU C++17Accepted46 ms200 KB

题目大意:在数组a中挑出k个数,组成新的数组,将新的数组中的每个数,化成二进制,若第i位上数字是1的元素数量大于等于max(1,k-2),那么该位计算出2^i参与求和,求选出的新数组对应的最大和。

进一步题意说明,样例模拟如下

Input:
3
2 1 3
Output:
3

1.挑出1个元素,即k=1,max(1,k-2)=1
2(10)
对应结果2^1=2

1(1)
对应结果2^0=1

3(11)
对应结果2^1+2^0=3


2.挑出2个元素,即k=2,max(1,k-2)=1
2(10),1(01)
对应结果2^1+2^0=3

2(10),3(11)
对应结果2^1+2^0=3

1(01),3(11)
对应结果2^1+2^0=3

3.挑出3个元素,即k=3,max(1,k-2)=1
2(10),1(01),3(11)
对应结果2^1+2^0=3


综合所有情况,最大和值是3

思路:

n==1,输出a[1]

n==2,输出a[1]|a[2]

n>=3,

输出a[i]|a[j]|a[k],因为max(1,K-2),K==3时,max(1,K-2)=1,能保证a[i],a[j],a[k]都被选中,

K==4时,max(1,K-2)=2,至少要有2个数组元素在同一位上雷同,该位才能选择有效,明显选择范围相比K==3更狭窄了。

K==5时,max(1,K-2)=3,至少要有3个数组元素在同一位上雷同,该位才能选择有效,明显选择范围相比K==3更狭窄了。

......

综上,K==3是选择数量最丰富的情况,最大值一定发生在其中。

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值