题目大意自己看吧:

题目链接

题解:

mx为所有val中最大的

1、如果n-k>log(mx)的话,就直接把所有数或起来就好了。

2、否则的话就DP,f[i][j]表示前i个和为j所用的最少数,这个很好DP,注意一下会爆空间,滚一下吧。(具体详见代码)

/*by cx_lzx*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
/*f[i][j]表示前i个和为j所用的最少数*/
int f[200000],g[200000];
int n,k;
int val[N],yu[20];
int mx=0;
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&val[i]),mx=max(mx,val[i]);if(n>k+log(mx)/log(2)){int ans=0;for(int i=1;i<=n;i++) ans|=val[i];// printf("!"); printf("%d\n",ans);return 0;}memset(f,inf,sizeof(f));f[0]=0;memset(g,inf,sizeof(g));yu[0]=1;for(int i=1;i<=17;i++) yu[i]=yu[i-1]*2;/*    爆空间版本 for(int i=0;i<=n-1;i++){for(int j=0;j<=yu[17]-1;j++){if(f[i][j]<inf){f[i+1][j]=min(f[i][j],f[i+1][j]);f[i+1][j|val[i+1]]=min(f[i+1][j|val[i+1]],f[i][j]+1);}}}int ans=0;for(int i=yu[17]-1;i>=0;i--){if(f[n][i]<=n-k){ans=i;break;}}*/for(int i=0;i<=n-1;i++){for(int j=0;j<=yu[17]-1;j++){if(i%2==0){if(f[j]<inf){g[j]=min(f[j],g[j]);g[j|val[i+1]]=min(g[j|val[i+1]],f[j]+1);}}else{if(g[j]<inf){f[j]=min(f[j],g[j]);f[j|val[i+1]]=min(f[j|val[i+1]],g[j]+1);}}}}int ans=0;if(n%2==0)for(int i=yu[17]-1;i>=0;i--){if(f[i]<=n-k){ans=i;break;}}else{for(int i=yu[17]-1;i>=0;i--){if(g[i]<=n-k){ans=i;break;}}}printf("%d\n",ans);
}

开学第一天就是周五,明天就可以回家了,然而所有课的老师全都在吹水。。。。。。

啥作业都没有,让我一度有些不适应。。。。。。。

又不敢整个晚修都来机房颓QAQ,在教室自习真的吓坏我QAQ。旁边那位大佬一直刷题,感觉都刷了30多页了,蒟蒻好方。

4976: 宝石镶嵌相关推荐

  1. BZOJ 4976: 宝石镶嵌 背包

    4976: 宝石镶嵌 Time Limit: 2 Sec  Memory Limit: 128 MB Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n ...

  2. [bzoj 4976]宝石镶嵌

    魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,-,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的宝石镶 ...

  3. bzoj 4976 宝石镶嵌

    传送门:www.lydsy.com/JudgeOnline/problem.php?id=4976 题意: 给n(n<=100000)个宝石,每个有个val(val<=100000),求取 ...

  4. bzoj 4976: 宝石镶嵌 动态规划

    题意 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,-,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的 ...

  5. bzoj 4976: 宝石镶嵌

    题意:n个数,去掉k个,使剩下的数的or和最大. 题解: 设a是w的最大值.分两种情况:1:n-k>=log a,每一位就一定可以选一个数来补上(除非所有都没有这一位).2:n-k< lo ...

  6. 4976: [Lydsy1708月赛]宝石镶嵌 dp

    Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,-,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升 法杖的威力.不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉 ...

  7. 【bzoj 4976】宝石镶嵌(贪心、高位前缀和)

    传送门biu~ 当n-k>=16时,每一位上的1都可以出现,只需要考虑每位是否有1即可. 剩下的情况n最大只有115(数据范围瞬间变得友善了). 令f[state]代表组合出state最少需要多 ...

  8. BZOJ4976: [Lydsy1708月赛]宝石镶嵌

    BZOJ4976: [Lydsy1708月赛]宝石镶嵌 https://lydsy.com/JudgeOnline/problem.php?id=4976 分析: 本来是从\(k\le 100\)这里 ...

  9. 我的世界服务器宝石系统,我的世界1.9-1.7宝石镶嵌插件

    我的世界1.9-1.7宝石镶嵌插件使用之后可以让玩家购买宝石,让玩家的战斗系统更加丰富多变. 简介: 总共有4种宝石 用法: 截图中已包含详细用法和说明 安装插件 这个插件和其他插件一样,下载后再把. ...

最新文章

  1. TinyMind 汉字书法识别竞赛开启总决赛啦!!
  2. maven只打包java目录_ssm项目中maven对resources目录打包的路径_默认路径,自定义路径...
  3. BootStrap 效果展示
  4. 【数据库系统概论】考研第六部分重点分析【6.1】
  5. 防止QQ密码被盗的五个绝招
  6. ACM 会场安排问题
  7. getParameter
  8. [译] iOS 设计模式进阶
  9. 4.7 Observer(观察者)
  10. Atitit 语音识别的技术原理
  11. 非常经典的java编程题全集-共50题(11-30)
  12. fio: engine libaio not loadable
  13. c语言中compar的用法,compare的用法知识整理
  14. ysoserial exploit/JRMPClient原理剖析
  15. Java工程师 数据结构与算法 数组面试题(Day40)
  16. 【PyTorch】pkg_resources
  17. matplotlib图表多曲线多纵轴绘制工具方法
  18. 四、全国计算机三级数据库考试——操作题(6—10套)
  19. 钽电容的作用,钽电容滤波好的原因
  20. 集团固定资产管理有哪些难题,又应该如何解决?

热门文章

  1. modbus tcp 协议详解
  2. 密码管理工具 — Lastpass
  3. 关于12306网站新增支付宝支付服务功能的公告
  4. 台湾知名炸鸡连锁店疑供应逾期肉品 遭封存追查
  5. 从永远到永远-SpringBoot微信公众号开发实战(一)-自用
  6. 论文阅读:Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour
  7. AutoCAD .Net 二次开发 VisualStudio 及 .Net Framework 选择
  8. TransactionScope事务简介
  9. 万能程序员时代来临!
  10. C# abstract详解