codeforces 1077F2. Pictures with Kittens (hard version)单调队列+dp
被队友催着上(xun)分(lian),div3挑战一场蓝,大号给基佬紫了,结果从D开始他开始疯狂教我做人??表演如何AKdiv3????
比赛场上:A 2 分钟,B题蜜汁乱计数,结果想得绕进去了20多分钟,至此GG,C秒出,D。。。还在想怎么做就告诉我二分答案,好那继续秒出。他看F我看E,没思路互换,F题都读了半天,其实就是我YY的题意,然后发现还是没N^3dp的想法,发现并不是区间dp,其实之前我E想到了枚举等差数列的项数,只是发现找不了起点(那不是找终点就好了)。基佬紫:枚举项数啊,我????然后他写完我就发现自己又傻了,rush完,想了5分钟F,发现了如何n^3dp,发现两个人思路一致,然后他1A了,然后我读秒交了两发,wa7,然后他说应该是单调栈优化,,结果真是,,他就这么AK了。。。然后我就睡觉了,第二天晚上,F1交了14发都是WA7,于是看别人的代码,一通胡改完就跑路了。于是今天中午颓废星人开始搞F2,想了一会儿感觉就是维护X个单调队列就好了,注意的是必须开个tmp数组,否则可能用之前已经更新了的更新这个位置,也就是内层两次for,同时未成功转移到的状态不应放入单调队列。然后一开始的写法感到不适,就找了找题解,写起来快多了。PS:我dp真的菜。
#include<bits/stdc++.h>
#define ll long long
#define mp make_pair
#define fi first
#define pb push_back
#define se second
#define rep(i,a,b)for(int i=a;i<=b;i++)
using namespace std; const int maxn=5005;
deque<pair<int,ll> >q[maxn];
ll a[maxn];
ll dp[maxn][maxn];
ll tmp[maxn];
ll n,k,x;
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%lld%lld%lld",&n,&k,&x);
rep(i,1,n)scanf("%lld",&a[i]);
q[0].pb(mp(0,0));
for(int i=1;i<=n;i++)
{
memset(tmp,0,sizeof(tmp));
for(int j=1;j<=x;j++)
{
while(!q[j-1].empty()&&q[j-1].front().fi<i-k)q[j-1].pop_front();
if(!q[j-1].empty())tmp[j]=q[j-1].front().se+a[i];
}
for(int j=1;j<=x;j++)
{
while(!q[j].empty()&&q[j].back().se<tmp[j])q[j].pop_back();
if(tmp[j])q[j].push_back(mp(i,tmp[j]));
}
}
ll ans=-1;
while(!q[x].empty()&&q[x].front().fi<=n-k)q[x].pop_front();
if(!q[x].empty())ans=q[x].front().se;
if(ans>0)cout<<ans<<"\n";
else cout<<-1<<"\n";
}
codeforces 1077F2. Pictures with Kittens (hard version)单调队列+dp的更多相关文章
- Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +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步,求最大分数,且最大分数的步数最少. ...
- Codeforces 1077F1 Pictures with Kittens (easy version)(DP)
题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...
- Codeforces Beta Round #6 (Div. 2 Only) 单调队列
题目链接: http://codeforces.com/contest/6/problem/E E. Exposition time limit per test 1.5 secondsmemory ...
- codeforces 251A Points on Line(二分or单调队列)
Description Little Petya likes points a lot. Recently his mom has presented him n points lying on th ...
- 【CF1077F2】Pictures with Kittens 单调队列+dp
题目大意:给定一个长度为 N 的序列,点有点权,从序列中选出恰好 X 个数,并且保证任意连续的 K 个数中均有一个被选中,求选出的点权最大是多少. 题解:此题可以作为 烽火传递+ 来处理,只不过在烽火 ...
随机推荐
- 自定义xUtils框架
xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能.它的功能很强大,但是有时候我们只需要其中的一些功能 ...
- AOP中使用Aspectj对接口访问权限进行访问控制
切面编程的应用案例比较多,在统一的日志处理,鉴权过程中都会用的AOP原理,本文主要针对对进口的访问权限进行控制为例,说明 切面编程的使用: 1.使用Aspectj的方式进行切面编程: 2.编码环境,s ...
- .NET性能优化小技巧
.NET 性能优化小技巧 Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 HttpClient 优化 关于使用 Htt ...
- dotNet core 应用部署至 centos(超详解附截图)
文章来源:公众号-智能化IT系统. 需要安装的插件以及支撑架构 1.dotnetSDK dotnet 相关命令是属于 .NET Core command-line (CLI) 的一部分,Microso ...
- Windows系统下搭建Git本地代码库
近由于工作需要,要把工作代码做一下版本管理.工作代码也不方便放到github上,也不想付费建私密库,公司也没几个人,所以就想着搭建一个本地Git版本库,来做版本管理.搭建过程如下. 系统环境:Dell ...
- 批量删除MSSQL 中主外键约束
转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...
- Java中console类的简单用法
Java.io.Console 只能用在标准输入.输出流未被重定向的原始控制台中使用,在 Eclipse 或者其他 IDE 的控制台是用不了的. import java.io.Console; pub ...
- SQLServer之创建全文索引
创建全文索引的必须条件 必须具有全文目录,然后才能创建全文索引. 目录是包含一个或多个全文索引的虚拟容器. 使用SSMS数据库管理工具创建全文索引 1.连接数据库,选择数据库,选择数据表->右键 ...
- 产品设计-后台管理权限设计RBAC
最近在做OA系统,设计到不同的员工会拥有不同权限对OA进行操作,总结了一下整体的设计 做权限的分配就是为了更好的管理不同类别的员工,如人事部可以看到普通员工的薪酬,可以查看全部员工的考勤数据请假等,而 ...
- 合并两个有序链表的golang实现
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 输入:->->, ->-> 输出:->->->->-> ...