BZOJ4976:宝石镶嵌(DP&思维)
Description
Input
Output
Sample Input
32 16 8 7
Sample Output
思路:之前遇到一个类似的题,不过是XOR不是OR,此题由于是OR,当要留的数比较多的时候一定能取到最大值,即a1|a2|...|an。
否则,我们可以dp,用dp[i][j]表示删去i个能否OR得到j。不难得到下面代码,复杂度O(17*N*1<<17),T了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int dp[][maxn],a[maxn],ans,Mx;
int main()
{
int N,K; scanf("%d%d",&N,&K); K=N-K;
for(int i=;i<=N;i++){
scanf("%d",&a[i]);
Mx|=a[i];
}
if(K>=) printf("%d\n",Mx);
else {
dp[][]=;
for(int i=;i<=N;i++){
for(int k=;k<=K;k++)
for(int j=;j<=Mx;j++){
dp[k][j|a[i]]|=dp[k-][j];
}
}
for(int i=;i<=Mx;i++) if(dp[K][i]) ans=i;
printf("%d\n",ans);
}
return ;
}
换个DP,我们用dp[i][j]表示前面i个得到j最多删去多少个,最后dp[N][i]>=K的最大i即是答案。
#include<bits/stdc++.h>
using namespace std;
const int maxn=<<;
int dp[][maxn],a[maxn],ans,Mx; //dp:最多可以删去
int main()
{
int N,K; scanf("%d%d",&N,&K);
for(int i=;i<=N;i++){
scanf("%d",&a[i]);
Mx|=a[i];
}
if(N-K>=) printf("%d\n",Mx);
else {
for(int i=;i<=N;i++) for(int j=;j<=Mx;j++) dp[i][j]=-;
dp[][]=;
for(int i=;i<=N;i++){
for(int j=;j<=Mx;j++){
dp[i][j]=max(dp[i][j],dp[i-][j]+);
dp[i][j|a[i]]=max(dp[i][j|a[i]],dp[i-][j]);
}
}
for(int i=Mx;i>=;i--) if(dp[N][i]>=K){
ans=i; break;
}
printf("%d\n",ans);
}
return ;
}
BZOJ4976:宝石镶嵌(DP&思维)的更多相关文章
- 【bzoj4976】宝石镶嵌(思维dp)
题目传送门:bzoj4976 不得不说这是道脑洞dp,思路真的清奇. 我们可以发现,虽然n很大,但是k只有100,这里面似乎隐藏了什么玄机. 我们可以发现,设总共有$ tot $个二进制位在这n个数中 ...
- 【BZOJ4976】宝石镶嵌 DP
[BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...
- cf1153D 树形dp+思维
一千八的题也不会做了呜呜呜 size[u]表示结点u下的叶子结点, 思维:可以想到一个子树对其父亲会有一个消耗值 考虑一个点如果是max,那么其最大值可以是size[u]-p,p是消耗值最小的子树 一 ...
- E. The Contest ( 简单DP || 思维 + 贪心)
传送门 题意: 有 n 个数 (1 ~ n) 分给了三个人 a, b, c: 其中 a 有 k1 个, b 有 k2 个, c 有 k3 个. 现在问最少需要多少操作,使得 a 中所有数 是 1 ~ ...
- 7月15日考试 题解(链表+状压DP+思维题)
前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...
- codeforces 1140D(区间dp/思维题)
D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- POJ 1390 Blocks(DP + 思维)题解
题意:有一排颜色的球,每次选择一个球消去,那么这个球所在的同颜色的整段都消去(和消消乐同理),若消去k个,那么得分k*k,问你消完所有球最大得分 思路:显然这里我们直接用二位数组设区间DP行不通,我们 ...
- “玲珑杯”ACM比赛 Round #18---图论你先敲完模板(DP+思维)
题目链接 DESCRIPTION INPUT OUTPUT SAMPLE INPUT 2 3 2 3 5 7 3 10 3 5 7 SAMPLE OUTPUT 12 26 HINT 官方题解: 代码如 ...
- HDU - 5117 Fluorescent(状压dp+思维)
原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...
随机推荐
- Struts2 入门实例
一.最简登录 Demo:login.jsp——web.xml——struts.xml——LoginAction.java——struts.xml——index.jsp 1.下载 Struts2 框架: ...
- C++复习6.C/C++高级数据类型
C/C++高级数据类型 1.C语言支持把基本数据类型组合起来形成更加强大的构造数据类型,就是C语言的struct(UDT, User Defined Type). Struct 和class : 在C ...
- 【lightoj-1024】Eid (高精度)
[题意] 给定n个数,求这n个数的最小公倍数. [题解] 最小公倍数当然不能按常规方法来求,因为最大的数将近是10000^1000级别的.然鹅最小公倍数怎么搞呢? 这里发现了一个规律: 4 5 6 3 ...
- Personal Introduction
专业:计算机科学与技术 我是博客园的新人,虽然接触编程世界只有一年,基础知识比较差,编程能力差,但对于这个专业,我还是充满兴趣,希望有一天能独当一面,从今天起,我将分享一些在学习web前端和其他方面的 ...
- String类运算符重载,自己实现
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Solr后台管理界面配置
配置来源 https://stackoverflow.com/questions/28043957/how-to-set-apache-solr-admin-password 注意:配置用户名密码后 ...
- 一道简单的JavaScript面试题
好久没更新博客了,随便写点东西吧. 自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了.最近一直在零碎的上班路上等电梯时间里面学习<图解HT ...
- 获取url的hash值
location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url. 而location ...
- java 静态代理 JDK动态代理 Cglib动态代理
下面以一个简单的银行账户为例讲述讲述动态代理. 设计一个银行账户类,包含用户的账户余额,实现查询和更新余额功能 这个系统用了一段时间,有客户要求对账说账户余额给弄错了?因为上面没有存取款记录,最后银行 ...
- 一个好工具-everything-可以找到浏览器的所有缓存
下载路径http://www.voidtools.com/downloads/ 我用它来寻找浏览器缓存的google瓦片.