题解

以前做过很多单调队列优化DP的题。

这个题有一点不同是对于有的状态可以转移,有的状态不能转移。

然后一堆边界和注意点。导致写起来就很难受。

然后状态也比较难定义。

dp[i][j]代表前i个人涂完前j个位置的最大收益。

然后转移考虑

第i个人可以不刷。dp[i][j]=dp[i-1][j];

第j个木板可以不刷dp[i][j]=dp[i][j-1];

然后当c[i].s<=j<=s[i]+l[i]-1时

dp[i][j]=p[i]*j+max(dp[i-1][k]-p[i]*k)其中j-l[i]<=k<=s[i]-1;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 const int N=20000;
 8 const int M=210;
 9 int dp[M][N],n,m,q[N],head,tail,ans;
10 struct people{
11     int l,p,s;
12 }c[M];
13 bool cmp(people a,people b){
14     return a.s<b.s;
15 }
16 int read(){
17     int sum=0,f=1;char ch=getchar();
18     while(ch<'0'||ch>'9'){
19         if(ch=='-')f=-1;
20         ch=getchar();
21     }
22     while(ch>='0'&&ch<='9'){
23         sum=sum*10+ch-'0';
24         ch=getchar();
25     }
26     return sum;
27 }
28 int main(){
29     while(scanf("%d%d",&n,&m)!=EOF){
30         memset(dp,0,sizeof(dp));
31         for(int i=1;i<=m;i++){
32             c[i].l=read();c[i].p=read();c[i].s=read();
33         }
34         sort(c+1,c+1+m,cmp);
35         for(int i=1;i<=m;i++){
36             memset(q,0,sizeof(q));
37             head=1;tail=1;
38             for(int j=1;j<=n;j++){
39                 dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
40                 if(j>=c[i].s&&j<=c[i].s+c[i].l-1){
41                     while(head<=tail&&q[head]<j-c[i].l)head++;
42                     if(head>tail)continue;
43                     dp[i][j]=max(c[i].p*j+dp[i-1][q[head]]-c[i].p*q[head],dp[i][j]);
44                 }
45                 if(j<c[i].s){
46                     while(head<=tail&&dp[i-1][j]-c[i].p*j>=dp[i-1][q[tail]]-c[i].p*q[tail])tail--;
47                     q[++tail]=j;
48                 }
49             }
50         }
51         printf("%d\n",dp[m][n]);
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/Xu-daxia/p/9757131.html

POJ 1821 Fence(单调队列优化DP)相关推荐

  1. POJ 1821 Fence ★(单调队列优化DP)

    题目大意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以 ...

  2. POJ - 3926 Parade(单调队列优化dp)

    题目链接:点击查看 题目大意:给出一个n*m的街道,其中有(n+1)*m条街道,每条街道都有一个值,现在我们需要从最下面的任意一点出发,到达最上面的任意一点结束,问如何规划路线能让沿途经过的街道的权值 ...

  3. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  4. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  5. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  6. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  7. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  8. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  9. 【单调队列优化DP】烽火传递 LibreOJ - 10180

    题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...

最新文章

  1. Mysql探究之null与not null
  2. union(联合)合并查询结果
  3. P2756,ssl2601-飞行员配对问题【网络流24题,最大匹配,dinic】
  4. redis -- 学习
  5. 作者:李超(1988-),男,上海交通大学硕士生,主要研究方向为大数据网络。...
  6. java 获取 t 的类型_如何获取类型为T的字段的类?
  7. 正四边形单元刚度矩阵与其尺寸关系
  8. IP地址快速切换(转)
  9. h5跳转app指定页
  10. MATLAB编程 动态数组的创建
  11. 使用Arduino和Node.js实现网页界面控制LED的亮度
  12. 计算机上什么键有存储,计算器存储运算键是什么?
  13. Sock学习1 (网络基本知识、Sock简介)
  14. 11. Zigbee应用程序框架开发指南 - 命令行接口(CLI)
  15. 100%代码覆盖率的悲剧
  16. 移动通信网络中的无线电通讯原理
  17. iphone模拟器上模拟内存警告
  18. PHPWord Beta 0.6.2 开发者指南
  19. Web services详解 :入门必看 | WSDL、SOAP
  20. Ubuntu18.04启用中文输入法

热门文章

  1. jdk,Eclipse,SWTDesigner安装【原创】
  2. win系统删除,已经注册的服务
  3. 阿里一面,说说你对Mysql死锁的理解
  4. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...
  5. python定义变量_Python基础 变量的基本使用
  6. 【kafka】kafka 生态系统 Ecosystem
  7. 【clickhouse】clickhouse UTC 时间带有时区 如何写入
  8. 【Elasticsearch】不常用 length filer、ngram filter、trim filter、truncate filter、unique filter、synonym token
  9. 【Okio】Okio 简单入门
  10. 【SpringCloud】Spring cloud Alibaba Nacos 集群和持久化配置