CF981D Bookshelves
按位贪心+DP的好题qwq
首先看到题目的要求,统计价值的时候的操作是按位与,就要有按位分别计算的意识
开始没意识到结果想了好久还是看了题解才想到
由于统计价值的方式不是加和,所以可能会出现两个较大的值AND起来更小甚至变成0,所以不能直接DP
考虑按位贪心
显然高位为1后的值一定比高位不为1的值要大,所以从高位向下贪心,每次检查能否在使前i个位值不变的情况下,使新加入的位变为1
检查的时候用区间dp实现即可
设\(dp[i][j]\)表示前j本书分到前i个书架上是否能使前面的位不变且当前检查的位为1
状态转移方程为:
dp[i][j]|=dp[i-1][kx]&&(((sum[j]-sum[kx])&&x)==x)
总的复杂度是\(O(n^{2}k)\)
注意位运算优先级和枚举的最高位的位数
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
int n,k,a[51],sum[51],dp[51][51],ans=0;
int check(int x){
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=k;i++)
for(int j=1;j<=n;j++)
for(int kx=0;kx<j;kx++)
dp[i][j]|=dp[i-1][kx]&&(((sum[j]-sum[kx])&x)==x);
return dp[k][n];
}
signed main(){
scanf("%lld %lld",&n,&k);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+a[i];
for(int i=60;i>=0;i--){
int mid=ans|(1LL<<i);
if(check(mid))
ans|=(1LL<<i);
}
printf("%lld",ans);
return 0;
}
CF981D Bookshelves的更多相关文章
- 【CF981D】Bookshelves(贪心,动态规划)
[CF981D]Bookshelves(贪心,动态规划) 题面 洛谷 Codeforces 给定一个长度为\(n\)的数列,把他们划分成\(k\)段,使得每段的和的结构按位与起来最大. 题解 从高位往 ...
- Codeforces Avito Code Challenge 2018 D. Bookshelves
Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...
- CF981D
CF981D 题意: 给你n个数,要求你分成k堆.每堆的内部加和,每堆之间是相与.问最大的值. 解法: 二进制下最大的数的所有位一定是1,所以贪心去找是否最大一定是正确的. 然后DP记录+贪心就可以A ...
- Codeforces 981 D.Bookshelves(数位DP)
Codeforces 981 D.Bookshelves 题目大意: 给n个数,将这n个数分为k段,(n,k<=50)分别对每一段求和,再将每个求和的结果做与运算(&).求最终结果的最大 ...
- Codeforces 981D Bookshelves(按位贪心+二维DP)
题目链接:http://codeforces.com/contest/981/problem/D 题目大意:给你n本书以及每本书的价值,现在让你把n本书放到k个书架上(只有连续的几本书可以放到一个书架 ...
- CodeForces - 981D Bookshelves
Discription Mr Keks is a typical white-collar in Byteland. He has a bookshelf in his office with som ...
- js手机对应的多级导航分享
js移动导航对应,您可以使用自适应时屏幕,当小画面在一定程度上的网站.使导航出现,The navigation effects such as the following figures:多级导航! ...
- English - Titanium Bike
The silver-gold triathlon bike was sitting in Kris's dining room next to the door. It had no kicksta ...
- Codechef April Challenge 2019 游记
Codechef April Challenge 2019 游记 Subtree Removal 题目大意: 一棵\(n(n\le10^5)\)个结点的有根树,每个结点有一个权值\(w_i(|w_i\ ...
随机推荐
- JQuery基本知识(3)
JQuery基本知识(3) 一.JQuery拥有可操作HTML元素和属性的强大方法. 1.JQuery DOM操作(DOM文档对象模型) 获取内容的方法: text():设置或返回所选元素的文本内容 ...
- 擠出線寬(Extrusion width),要怎麼設定?
擠出線寬(Extrusion width),要怎麼設定? Slic3r的作者,把這邊的%設定,跟"層高"做連結.我個人認為擠出線寬,要以噴頭孔徑當做設定參考才好.層高應該只要設定成 ...
- Swift闭包(I) @autoclosure和@escaping的区别
1. 参考资料 https://www.cnblogs.com/sgxx/p/6209944.html https://www.jianshu.com/p/99ade4feb8c1
- neuFlow&CNP-卷积计算加速器&神经网络加速芯片生态系统
上周看到韩松毕业论文,扯出神经网络加速器EIE,刚好这周调研了一下neuFlow,扯出09年的一篇做卷积加速的文章,大牛Lecun Yan的学生做的,一晃眼,快十年了.也记录之. 这一套还没研究透,又 ...
- 从网站上扒网页,保存为file文件格式
保存下来的页面总是有部分特效缺失,可是文件包里已经有好几个js文件了. 例如想保存易迅的搜索页面,条件筛选栏的按钮全部失效了,按钮-更多.多选等 都没有反应,搜索结果的鼠标悬浮显示完整信息也没有了. ...
- 使用IntelljIDEA生成接口的类继承图及装饰器模式
类图生成方法 以一个装饰器模式实现数学运算的例子为例. 安装 Intellj Ultimate , lience server: http://xdouble.cn:8888/ 在类上右键点击 cla ...
- NGINX的几个应用场景
NGINX的几个应用场景 两个参考地址: NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin NGINX的中文网站:htt ...
- PLSQL 问题小记
问题1:在一个拼写长字符串的函数中,若出现ora-06502或者ora-06512的错误,则有可能是在拼串的过程中,数据类型的隐式转换出了问题,如:字符类型转为数字,此时会出现错误. 解决方案:在拼串 ...
- JAVA基本语法测试
一: 1,JAVA的基本运行单位是类 2,类的成员:成员变量,构造方法,普通方法和内部类 3,成员变量种类:字符类型:char 布尔类型:boolean 数值类型:byte, s ...
- Python爬虫【四】Scrapy+Cookies池抓取新浪微博
1.设置ROBOTSTXT_OBEY,由true变为false 2.设置DEFAULT_REQUEST_HEADERS,将其改为request headers 3.根据请求链接,发出第一个请求,设置一 ...