E. Maximum Subsequence Value


题目大意:有点难解释。。建议自己看题。我这里就粗略解释:给定一个数组aaa,要求选出具有最大价值的子序列。假设此子序列的长度为kkk,那么最大价值的计算方法为:对于这个序列中的所有数的二进制表示,第 i (从0开始)位上是1的数的数量若大于等max(k−2,1)max(k - 2, 1)max(k−2,1),那么价值就可以 += 2i2^i2i。(还没理解的可以看看样例解释)。


解题思路:我们贪心来看:2k>20+21+....+2k−12^k>2^0+2^1+....+2^{k-1}2k>20+21+....+2k−1所以我们要保证最高位的i是有贡献的。通过上面的sumi>=max(k−2,1)sum_i>=max(k-2,1)sumi​>=max(k−2,1)我们可以知道最多2个0,最少1个1最多2个0,最少1个1最多2个0,最少1个1
我们假设我们刚好选了3个数得到最优解是maxv=10110010100111maxv=10110010100111maxv=10110010100111,那么我们在选第4个数得时候,我们选了这三个数是最优解各个位置上得情况可能是,111,110,100111,110,100111,110,100,假如说他在某个maxv的0位上有1,但是为什么在前3个的时候没选到呢?根据我们贪心的思想它高位是0,把组合成了100010001000后使得高位对答案没有贡献了所以就不选了。所以最优答案一定是3个数。


#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <cmath>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <set>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f-
#define hash Hash
#define next Next
#define f first
#define s second
#define lowbit(x) (x & (-x))
using namespace std;
const int N = 6e5 + 10, M = 25 * N;
const double eps = 1e-10;typedef long long LL;
typedef unsigned long long ULL;
typedef pair<LL,LL> PII;
#define ll long long
using namespace std;int main()
{int T,n,i,j,k;cin>>n;LL A[n],m=0;for(i=0;i<n;++i)cin>>A[i];for(i=0;i<n;++i)for(j=i;j<n;++j)for(k=j;k<n;++k)m=max(m,A[i]|A[j]|A[k]);cout<<m;
}

贪心 ---- E. Maximum Subsequence Value[位运算]相关推荐

  1. CH - 0104 起床困难综合症(位运算+贪心)

    题目链接:点击查看 题目大意:我们需要构造一个初始值start,范围在[0,m],要求使用这个初始值进行k次操作后得到的答案最大,每次操作分为三个类型: AND x:让当前答案与x进行按位与 OR x ...

  2. USACO2.1【bfs,排序,贪心,dfs,位运算】

    前言 开始刷USACO的题了. 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序. T1:城堡 TheCastleThe CastleTheCastle 评测记录: https ...

  3. 0x01.基本算法 — 位运算

    目录 一.位运算 二.memset函数 三.移位运算 四.二进制状态压缩 五.成对变换 六.lowbit 七.相关习题 0.AcWing 26. 二进制中1的个数 1.Acwing 89. a^b(快 ...

  4. 蓝桥备赛第一周2021.1.11 递归 枚举 位运算

    文章目录 递归实现指数型枚举 递归指数型枚举 方法1:肯定是2^n行,所以直接就是上一个动态m从0到n加一堆空行 方法2:以最新的值为n为结束,遇到为0的不输出,用完要恢复为0 递归实现排列型枚举 非 ...

  5. 【NOIP模拟题】“与”(位运算)

    因为是与运算,所以我们可以贪心地每次找最高位的,将他们加入到新的序列中,然后每一次在这个新的序列继续找下一个位. 然后最后序列中任意两个的与运算的值都是一样的且是最大的. #include <c ...

  6. 【测试点5】1007 Maximum Subsequence Sum (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a sequence of K integers { N​1​​ , N​2​​ , -, N​K​​ }. A co ...

  7. UVA11556 Best Compression Ever【位运算】

    Being educated in Computer Science and Mathematics is not always easy. Especially not if you have &q ...

  8. 【位运算】系列题目合集

    理论 位运算相关基础知识详见此篇 博客 例题 leetcode765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. ...

  9. codeforces: D. AND, OR and square sum【位运算and和or的诡计】

    分析 x和y变成x|y , x&y 他们的和不变的,然后我们直到这样变只会让他们的差放大,放大的话平方和肯定更大 对于n个元素而言,多次and和or并不会改变每个位上的1的总数,我们先把每个位 ...

最新文章

  1. IC基础知识(3)通用模拟,数字和混合信号集成电路
  2. java笔记javaweb部分
  3. centos7上systemd详解
  4. EPSON 自带CCD图像处理包使用举例
  5. java 获取所有带指定注解的类名_SXT DAY023 反射和注解
  6. 设计模式---简单工厂设计模式
  7. c语言编写简单的成绩管理系统,用c语言编写学生成绩管理系统
  8. 阅读bulid to win感想
  9. 随想录(简单的链接文件)
  10. 如何解决“呈现控件时出错”的问题(转)
  11. java多线程设计模式:wait/notify机制(转)
  12. IDEA JetBrains Mono 字体安装
  13. static analysis tool
  14. Quartus-II 13.1 详细安装、注册、配置步骤
  15. 大话设计模式——解释器模式
  16. 农历 java_公历农历互相转换的Java日历工具类详解
  17. Captain Flint and a Long Voyage
  18. python怎么统计单词总数_python统计单词
  19. 电子邮件客户端:Mail Pilot 3 for Mac
  20. 当小米MIX 2遇到iPhone X 你会怎么选?

热门文章

  1. 解决 python pip install安装速度慢| 版本低|跨过个别错误包
  2. OpenCV卡尔曼滤波介绍与代码演示
  3. 基于关键帧的RGB-D视觉惯性里程计
  4. 长期分享干货的技术大佬
  5. PrestaShop 网站后台配置(六)
  6. ios 3DTouch初识
  7. BNUOJ34980方(芳)格(哥)取数(好坑)
  8. java Timer定时器管理类
  9. NFS安装系统及PS1设定
  10. linux常用的命令行