设最大的数为$w$,若$n>k+\log w$,那么显然所有$1$都可以保留,否则现在$n\leq k+\log w$。

如果$w\leq 100000$,那么可以DP,设$f[i][j]$表示考虑前$i$个数,保留的数的$or$是$j$时,最多能删除多少个数,时间复杂度$O(nw)$。

如果$w>100000$,那么$k\leq 7$,爆搜即可,时间复杂度$O(C(n,k))$。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;
int n,m,i,j,o,ans,mx,f[2][131100],a[N];
void dfs(int x,int y,int z){
if(y+n-x+1<m)return;
if(x>n){
ans=max(ans,z);
return;
}
dfs(x+1,y,z|a[x]);
if(y<m)dfs(x+1,y+1,z);
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]),mx=max(mx,a[i]);
if(n>m+31){
for(i=1;i<=n;i++)ans|=a[i];
return printf("%d",ans),0;
}
if(mx<=100000){
for(i=0;i<131072;i++)f[0][i]=-N;
f[0][0]=0;
for(i=o=1;i<=n;i++,o^=1){
for(j=0;j<131072;j++)f[o][j]=f[o^1][j]+1;
for(j=0;j<131072;j++)if(f[o^1][j]>=0)f[o][j|a[i]]=max(f[o][j|a[i]],f[o^1][j]);
}
for(i=131071;~i;i--)if(f[o^1][i]>=m)break;
return printf("%d",i),0;
}
dfs(1,0,0);
return printf("%d",ans),0;
}

  

Ural2110 : Remove or Maximize的更多相关文章

  1. QT自绘标题和边框

    在QT中如果想要自绘标题和边框,一般步骤是: 1) 在创建窗口前设置Qt::FramelessWindowHint标志,设置该标志后会创建一个无标题.无边框的窗口. 2)在客户区域的顶部创建一个自绘标 ...

  2. How to remove a Data Guard Configuration from Primary Database (文档 ID 733794.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.3 [Release 10.1 to 11. ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. [LeetCode] Remove K Digits 去掉K位数字

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  5. [LeetCode] Remove Duplicate Letters 移除重复字母

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  6. [LeetCode] Remove Invalid Parentheses 移除非法括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  7. [LeetCode] Remove Linked List Elements 移除链表元素

    Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...

  8. [LeetCode] Remove Duplicates from Sorted List 移除有序链表中的重复项

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  9. [LeetCode] Remove Duplicates from Sorted List II 移除有序链表中的重复项之二

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

随机推荐

  1. C. cltt的幸运数LCAtarjan

    /*C: cltt的幸运数 Time Limit: 1 s      Memory Limit: 128 MB Submit Problem Description 一棵树有n个节点,共m次查询,查询 ...

  2. 矩阵乘法的运算量计算(华为OJ)

    题目地址: https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&&tqId=21293 ...

  3. MyBatis - 8.MyBatis工作原理

    Mybatis 配置 1.SQLSessionFactory的初始化 根据配置文件获取 SqlSessionFactory 2.openSession获取SqlSession对象 3.getMappe ...

  4. 上传文件---未能找到路径“D:\MyProject\Files\”的一部分

    C# 使用控件FileUpload 上传文件,简单实例: protected void btnUpload_Click(object sender, EventArgs e) { string pat ...

  5. openpose pytorch代码分析

    github: https://github.com/tensorboy/pytorch_Realtime_Multi-Person_Pose_Estimation # -*- coding: utf ...

  6. OpenGL的gl.h出现一堆错误,如重定义什么的

    问题:生成时提示 gl.h中出现一堆错误,如 error C2144: 语法错误 : "void"的前面应有";" error C2182: "API ...

  7. python全栈开发day66-视图系统、路由系统

    一.昨日内容回顾 1. tags 1. for循环 {% for name in name_list %} {{ name }} {% endfor %} {% for name in name_li ...

  8. Migrating your code from 9.3 to 10.x

    刚发现ArcGIS Objects SDK提供了一个代码升级分析工具,用于辅助将程序从9.3升级到10.X:ArcGIS Code Migration Analyzer. 安装sdk后,在vs2010 ...

  9. Flink的流处理--KeyBy

    逻辑上将一个流分成不相交的分区,每个分区包含相同键的元素.在内部,这是通过散列分区来实现的 object Keyby { def main(args: Array[String]): Unit = { ...

  10. Kudu的集群安装(1.6.0-cdh5.14.0)

    kudu的架构体系 下图显示了一个具有三个 master 和多个 tablet server 的 Kudu 集群,每个服务器都支持多个 tablet.它说明了如何使用 Raft 共识来允许 maste ...