【题解】Fence(单调队列)
【题解】Fence(单调队列)
题目大意
有\(k\)个粉刷匠,每个粉刷匠一定要粉刷某个位置\(S_i\),一个粉刷匠可以粉刷至多\(l_i\)个位置(必须连续\(l_i\)互不相同),一个粉刷匠粉刷一个位置要收\(p_i\)元,问怎么安排可以使得粉刷匠赚的钱最大。
\(dp(i,j)\)考虑了前\(i\)个人,考虑了前\(j\)个位置的最大值,转移是这样的:
\]
按照讨论把第二个\(\max\)变一下
\]
现在问题就变成如何维护\(\max\{dp(i-1,k)-kp_i\}\)
单调队列就好了。注意一些细节:
- \(\max\{dp(i-1,j),dp(i,j-1)\}\) 要在转移完毕后继承。
- \(k\in [j-l_i,s_i)\)
- \(dp(0,\forall x)=dp(\forall x,0)=0\)(初始化)
目标:\(dp(k,n)\)。
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=1.6e4+5;
struct NODE{
int l,p,s;
NODE(){l=p=s=0;}
inline void scan(){l=qr();p=qr();s=qr();}
inline bool operator <(const NODE&a)const{return s<a.s;}
}data[101];
int dp[101][maxn];
int n,k;
deque < int > q;
int main(){
n=qr();k=qr();
memset(dp,0xcc,sizeof dp);
memset(dp[0],0,sizeof dp[0]);
for(register int t=1;t<=k;++t)
data[t].scan(),dp[t][0]=0;
sort(data+1,data+k+1);
for(register int t=1;t<=k;++t){
q.clear();q.push_back(0);
for(register int i=1;i<data[t].s;++i){
while(q.size()&&q.back()+data[t].l<data[t].s) q.pop_back();
while(q.size()&&(dp[t-1][q.front()]-q.front()*data[t].p<=dp[t-1][i]-i*data[t].p)) q.pop_front();
q.push_front(i);
}
for(register int i=data[t].s;i<=min(n,data[t].s+data[t].l-1);++i){
while(q.size()&&q.back()+data[t].l<i) q.pop_back();
if(q.size()) dp[t][i]=max(dp[t][i],dp[t-1][q.back()]+(i-q.back())*data[t].p);
}
for(register int i=1;i<=n;++i)
dp[t][i]=max(dp[t][i],max(dp[t-1][i],dp[t][i-1]));
}
cout<<dp[k][n]<<endl;
return 0;
}
【题解】Fence(单调队列)的更多相关文章
- POJ 1821 Fence(单调队列优化DP)
题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...
- Sliding Window - 题解【单调队列】
题面: An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving fr ...
- poj 1821 Fence 单调队列优化dp
/* poj 1821 n*n*m 暴力*/ #include<iostream> #include<cstdio> #include<cstring> #incl ...
- poj1821 Fence(单调队列优化dp)
地址 一排N个木板,M个工匠站在不同位置$S_i$,每个人可以粉刷覆盖他位置的.最长长度为$L_i$木板段,每刷一个有$P_i$报酬.同一木板只刷一次.求最大报酬. 根据每个人的位置dp,设$f[i] ...
- [题解](单调队列)luogu_P2216_BZOJ_1047 理想的正方形
调了半天,发现这个写法确实极易错...... 对于每列都维护一个单调队列记录最大最小值,这样一次操作后就把最大最小值压到了一维, 然后再对这一行维护一个单调队列,每次更新ans值,然而对于数组和队列下 ...
- HDU 5945 题解(DP)(单调队列)
题面: Fxx and game Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) T ...
- $Poj1821\ Fence\ $单调队列优化$DP$
Poj Acwing Description 有N块木板等待被M个工匠粉刷,每块木板至多被刷一次.第i个工匠要么不粉刷,要么粉刷包含木块Si的,长度不超过Li的连续的一段木板,每粉刷一块可以得到P ...
- 【NOIP2017】跳房子 题解(单调队列优化线性DP)
前言:把鸽了1个月的博客补上 ----------------- 题目链接 题目大意:机器人的灵敏性为$d$.每次可以花费$g$个金币来改造机器人,那么机器人向右跳的范围为$[min(d-g,1),m ...
- P1725 琪露诺 题解(单调队列)
题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. ...
随机推荐
- noip2013/day1/1/转圈游戏
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 128000kB 描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从 ...
- Codeforces 323C Two permutations
题目描述 You are given two permutations pp and qq , consisting of nn elements, and mm queries of the for ...
- Scala之Future超时
最近在开发中使用akka http进行请求,返回的是一个future,并且要对future进行超时设置,不知怎么设置,因此学习了下. 一.Future阻塞 首先,scala中的future不支持内置超 ...
- hdu1874最短路
裸裸的最短路问题,将while(scanf("%d%d", &N, &M)!=EOF)粗心写为while(scanf("%d%d", & ...
- 2016.6.20 maven下载与安装步骤
(1)进入maven官网的下载页面. https://maven.apache.org/download.cgi (2)下载页面中可以看到很多可供下载的链接.gz和zip只是压缩方式的区别,这两个都是 ...
- .NET Core R2安装及示例教程
.NET Core R2安装及示例教程 Install for Windows - Visual Studio 2015 1 Download Visual Studio 2015 Make sure ...
- 【SharePoint】K2 for SharePoint 安装笔记【未完工】
0.安装环境说明 0.1.软件版本 OS : Window Server 2012 标准版 SharePoint : 2013标准版 K2 : 4.6.9 0.2.环境结构 SharePoint 20 ...
- 有问必答项目 -数据库设计文档(ask-utf-8)
有问必答项目 -数据库设计文档(ask-utf-8) 表前缀的使用 早期租用公共的服务器 一个数据库,保存多个项目(问答.电子商务.医院),为了区分这些项目,使用前缀分割 ask_ ec_ hospi ...
- Vue2.0 引用 exif.js 实现调用摄像头进行拍照功能以及图片上传功能
vue组件代码 <template> <div> <div style="padding:20px;"> <div class=" ...
- libGDX 模块概览
本文章翻译自libGDX官方wiki,.转载请注明出处:http://blog.csdn.net/kent_todo/article/details/37940595 libGDX官方网址:http: ...