【CF1077F2】Pictures with Kittens 单调队列+dp
题目大意:给定一个长度为 N 的序列,点有点权,从序列中选出恰好 X 个数,并且保证任意连续的 K 个数中均有一个被选中,求选出的点权最大是多少。
题解:此题可以作为 烽火传递+ 来处理,只不过在烽火传递的基础上加了选出恰好 X 个数,因此只需在状态维度上加上一维选出的个数即可,\(dp[i][j]\) 表示前 i 个数中选出 j 个数,且第 i 个数被选中的最优解,因此有状态转移方程:\(dp[i][j]=max\{dp[k][j-1],k\in[i-m,i-1] \}+val[i]\),直接用单调队列进行优化即可。
同时,可以直接在初始化的时候将所有值设为无穷,避免了无效的状态转移,从而避免了不合法的解对答案的贡献,也就避免了讨论何时输出 -1 的问题。
代码如下
#include<bits/stdc++.h>
using namespace std;
const int maxn=5010;
int n,m,tot,val[maxn],q[maxn<<1],l,r;
long long dp[maxn][maxn],ans;
void read_and_parse(){
scanf("%d%d%d",&n,&m,&tot);
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
}
void solve(){
memset(dp,0xcf,sizeof(dp));
dp[0][0]=0;
for(int i=1;i<=tot;i++){
l=1,r=0;
for(int j=1;j<=n;j++){
while(l<=r&&q[l]<j-m)++l;
while(l<=r&&dp[j-1][i-1]>dp[q[r]][i-1])--r;
q[++r]=j-1;
dp[j][i]=dp[q[l]][i-1]+val[j];
}
}
ans=-1;
for(int i=n-m+1;i<=n;i++)ans=max(ans,dp[i][tot]);
printf("%lld\n",ans);
}
int main(){
read_and_parse();
solve();
return 0;
}
【CF1077F2】Pictures with Kittens 单调队列+dp的更多相关文章
- POJ 3017 单调队列dp
Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8764 Accepted: 2576 ...
- [TyvjP1313] [NOIP2010初赛]烽火传递(单调队列 + DP)
传送门 就是个单调队列+DP嘛. ——代码 #include <cstdio> ; , t = , ans = ~( << ); int q[MAXN], a[MAXN], f ...
- zstu 4237 马里奥的求救——(单调队列DP)
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4237 这题可以转化为每次可以走g~d+x步,求最大分数,且最大分数的步数最少. ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- codeforces 1077F2. Pictures with Kittens (hard version)单调队列+dp
被队友催着上(xun)分(lian),div3挑战一场蓝,大号给基佬紫了,结果从D开始他开始疯狂教我做人??表演如何AKdiv3???? 比赛场上:A 2 分钟,B题蜜汁乱计数,结果想得绕进去了20多 ...
- vijos P1243 生产产品(单调队列+DP)
P1243生产产品 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...
- POJ 1821 单调队列+dp
题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...
- 【LOJ#10180】烽火传递 单调队列+dp
题目大意:给定一个 N 个非负整数数组成的序列,每个点有一个贡献值,现选出其中若干数,使得每连续的 K 个数中至少有一个数被选,要求选出的数贡献值最小. 题解:设 \(dp[i]\) 表示考虑了序列前 ...
- BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)
5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 79 Solved: 58[Sub ...
随机推荐
- 实验八 Web基础
实验八 Web基础 1.安装apache sudo apt-get install apache2 2.启动apache service apache2 start 3.使用 netstat -tup ...
- Linux下Maven+SVN自动打包脚本
公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...
- linux之grep 基础
第一章 -a 将binary文件以text文件的方式搜寻数据-c 只输出匹配行的计数,计算找到匹配的次数-I(大写i) 不区分大小写(只适合用于单字符)-h 查询多文件时不显示 ...
- 修炼内功_day01
测试六段: 测试第一段: - 能根据测试用例的描述步骤来执行用例 - 能对照用例的预期结果发现产品的问题 - 能够清晰准确的将问题记录下来后反馈给开发, ...
- 【LeetCode】数组--合并区间(56)
写在前面 老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组( ...
- ELK日志方案--使用Filebeat收集日志并输出到Kafka
1,Filebeat简介 Filebeat是一个使用Go语言实现的轻量型日志采集器.在微服务体系中他与微服务部署在一起收集微服务产生的日志并推送到ELK. 在我们的架构设计中Kafka负责微服务和EL ...
- 以太坊—P2P网络
Chord算法 1.Chord 概念 Chrod算法是P2P中的四大算法之一,是有MIT(麻省理工学院)于2001年提出 . Chord的目的是提供一种能在P2P网络快速定位资源的的算法,Chord并 ...
- VC++ MFC程序设置以管理员权限运行
1.引入资源文件 (.manifest文件),文件中的 name 值为程序全称.exe:文件内容如下: <?xml version="1.0" encoding=" ...
- PAT甲题题解-1128. N Queens Puzzle (20)-做了一个假的n皇后问题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789810.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 读书笔记(chapter18)
调试 18.1准备开始 18.2内核中的bug 1.从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触发的 18.3通过打印来调试 1.健壮性 健壮性是print ...