题目

在L的书架上,有N本精彩绝伦的书籍,每本书价值不菲。

M是一个书籍爱好者,他对L的书籍早就垂涎三尺。最后他忍受不了诱惑,觉得去偷L的书,为了迅速完成这件事,同时他不希望L很快发现书籍少了,他决定偷书时,对于任意连续的k本书,他最多选B本,最少选A本。现在他想知道怎么选出来的书本最后使得偷的书籍的价值和,与剩下的书籍价值和,差值最大。

输入

第一行四个整数 n,k,a,b

一行 N 个整数表示每本书的价值

输出

一个整数表示答案

样例输入

2 1 0 1
2 -2

样例输出

4

提示

得到第一本书 得到的价值和是 2

剩余的价值和是-2

差值为 4

对于 20%:n<=10

对于另外 20%:a=0,b=k

对于 100%:n<=1000,0<=a<=b<= k<=10 ,所有书籍的价值的绝对值<=10^9

看到k小于等于10就应该想到状压dp的

dp[i][j]表示当前在第i个,状态为j的最优解,因为每次向后递推一个,我们只需要维护最后一个是否选了,并且判断现在这个选不选

结果被数组大小给卡了,真是那啥了那啥

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 int v[1055],n,k,b,a,num[1024];
 5 ll dp[1055][1024],sum;
 6 inline void getn(){
 7     for(int i=0;i<1024;i++)
 8     {
 9         int t=i,tot=0;
10         while(t)
11         {
12             if(t&1)
13             {
14                 tot++;
15             }
16             t/=2;
17         }
18         num[i]=tot;
19     }
20 }
21 inline bool judge(int k)
22 {
23     return !(num[k]<a||num[k]>b);
24 }
25 int main(){
26     scanf("%d%d%d%d",&n,&k,&a,&b);
27     getn();
28     for(int i=1;i<=n;i++)
29     {
30         scanf("%d",&v[i]);sum+=v[i];
31     }
32     for(int i=0;i<(1<<k);i++)
33     {
34         for(int j=0;j<k;j++)
35         {
36             if(i&(1<<j)) dp[k][i]+=v[k-j];
37         }
38     }
39     for(int i=k+1;i<=n;i++)
40     {
41         for(int j=0;j<(1<<k);j++)
42         {
43             if(!judge(j)) continue;
44             int st=j;
45             st>>=1;
46             if(j&1)
47             {
48                 int sta=st+(1<<k-1);
49                 dp[i][j]=dp[i-1][sta]+v[i];
50                 if(judge(st)) dp[i][j]=max(dp[i][j],dp[i-1][st]+v[i]);
51             }
52             else
53             {
54                 int sta=st+(1<<k-1);
55                 dp[i][j]=dp[i-1][st];
56                 if(judge(sta)) dp[i][j]=max(dp[i][j],dp[i-1][sta]);
57             }
58         }
59     }
60     ll ans=-1000000000000;
61     for(int i=0;i<(1<<k);i++)
62     {
63         if(judge(i))
64         ans=max(ans,dp[n][i]);
65     }
66     cout<<ans-sum+ans<<endl;
67     return 0;
68 }

转载于:https://www.cnblogs.com/forever-/p/9736127.html

NOIP模拟——偷书(读书人的事,那能叫偷吗?)相关推荐

  1. NOIP模拟(10.22)T2 杆子的排列

    杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...

  2. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  3. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  4. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  5. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  6. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  7. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  8. 微软的技术,直接颠覆了我对听书这件事的看法

    阿虚一度是对听书不太感兴趣的(虽然一大部分原因是我看的小说没有有声书),AI机械式的发音,固定的腔调.语速,总会丢失那些波澜起伏的剧情所带来的沉浸式情感体验 但最近才知道微软在 //Build 202 ...

  9. Noip 模拟练习5

    Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...

  10. book类 借书 java_模拟借书系统(Java入门第三季第一章练习)

    程序流程图我就不放上来了,慕友们将就着看看吧,注释还算清晰. 这段代码是Java入门第三季异常与异常处理这一章的练习题, 代码尚有不足,请多多指教. /** * 功能:模拟借书系统 * 要求: * 1 ...

最新文章

  1. Samba amp; Nginx - Resource temporarily unavailable
  2. 4、题目要求:读入N名学生的成绩,将获得某一给定分数的学生人数输出。 * * 输入格式:测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个
  3. ios自定义条形进度条
  4. banner手动切换效果
  5. [CF407B] Long Path
  6. string 与char *的区别
  7. windo.open 全攻略
  8. QT的QBarCategoryAxis类的使用
  9. 这么简单的bug,你改了2天?
  10. c语言程序设计课程设计心得体会,C语言程序课程设计心得体会
  11. 字符串的最长不重复字串
  12. Failure [INSTALL_FAILED_OLDER_SDK] [每件问题100块]
  13. LaTeX 切换其它另外的期刊会议模板
  14. 实测 ? 2019 史上最全 28个国外国内免费虚拟手机号平台
  15. MD5 文件校验之 java 实现
  16. TP框架中S函数使用方法
  17. print中的逗号“,”打印出来相当于空格
  18. brew对redis的使用
  19. 2020年第十五届全国大学生智能汽车竞赛技术报告
  20. 协方差与皮尔森相关性系数

热门文章

  1. 基恩士计算机软件,【基恩士】IV 系列 开始指南 PC软件篇 (简体中文).pdf
  2. favicon.ico在线制作,在线Favicon.ico制作转换工具
  3. java支付宝原理_java支付宝支付原理及其问题点
  4. 1005打印任务取消不了 hp_(完整版)hp打印机无法取消打印的文档解决方法
  5. 服务器是用集成网卡好还是独立网卡好
  6. HTML表格的单元格合并
  7. iOS网络协议_HTTP/TCP/IP浅析
  8. 数据分析师是做什么的?数据分析师岗位职责
  9. 漏洞挖掘分析技术总结
  10. 精益研发管理-培训感想