bzoj 4976: 宝石镶嵌
2017-09-19 22:19
176 查看
题意:n个数,去掉k个,使剩下的数的or和最大。
题解:
设a是w的最大值。分两种情况:1:n-k>=log a,每一位就一定可以选一个数来补上(除非所有都没有这一位)。2:n-k< log a,dp,f[i][j]表示前i个数or和为j最多去掉几个数。
代码:
题解:
设a是w的最大值。分两种情况:1:n-k>=log a,每一位就一定可以选一个数来补上(除非所有都没有这一位)。2:n-k< log a,dp,f[i][j]表示前i个数or和为j最多去掉几个数。
代码:
#include<bits/stdc++.h> using namespace std; int n,k,w[100010],f[120][131072]; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&w[i]); sort(w+1,w+1+n); if(n-k>=20) { int ans=0; for(int i=0;i<20;i++) { for(int j=1;j<=n;j++) if(w[j]>>i&1) { ans|=w[j]; break; } } printf("%d",ans); } else { memset(f,128,sizeof(f)); f[0][0]=0; for(int i=1;i<=n;i++) { for(int j=0;j<131072;j++) { f[i][j]=max(f[i][j],f[i-1][j]+1); f[i][j|w[i]]=max(f[i][j|w[i]],f[i-1][j]); } } for(int i=131071;i>=0;i--) if(f [i]>=k) { printf("%d",i); break; } } }
相关文章推荐
- [bzoj 4976]宝石镶嵌
- [bzoj4976][dp]宝石镶嵌
- BZOJ 4976: 宝石镶嵌 背包
- bzoj4976宝石镶嵌 DP
- [bzoj4976]宝石镶嵌
- 【BZOJ4976】宝石镶嵌 DP
- bzoj 4976: 宝石镶嵌 动态规划
- 【bzoj4976】宝石镶嵌 乱搞+dp
- BZOJ2663 [Beijing wc2012]灵魂宝石
- bzoj 1625: [Usaco2007 Dec]宝石手镯【背包】
- 【BZOJ】1625: [Usaco2007 Dec]宝石手镯(01背包)
- 【bzoj 1625】[Usaco2007 Dec]宝石手镯
- [BZOJ] 1625: [Usaco2007 Dec]宝石手镯
- Java设计模式之从[暗黑破坏神"装备镶嵌宝石系统"]分析桥接(Bridge)模式
- Java设计模式之再从[暗黑破坏神"装备镶嵌宝石系统"]分析装饰(Decorator)模式
- BZOJ 1625: [Usaco2007 Dec]宝石手镯
- bzoj 1625: [Usaco2007 Dec]宝石手镯
- BZOJ 2663: [Beijing wc2012]灵魂宝石
- bzoj4976 宝石镶嵌
- 灵魂宝石 BZOJ 2663