问题

https://vjudge.net/problem/UVA-1427

分析

这道题的状态是dp[i][j],代表走到第i,j的位置时的收入v,采用填表法,到达i,j的选择有三种,一种是dp[i][j]=dp[i-1][j],就是直接从上一行的第j个路口走到这一行的j路口,还有就是从左往右在i行走到j,或者从右往左,转移方程分别是 从左向右dp[i][j]=max(dp[i-1][k]+sum[i][j]-sum[i][k]) , k<j ,sum[i][j]是从i行起点走到第j个路口的累计value, 从右向左dp[i][j]=max(dp[i-1][k]+sum[i][k]-sum[i][j]),k>j
所以送左向右需要找到 dp[i-1][k]-sum[i][k]的最大值, 从右向左需要找到 dp[i-1][k]+sum[i][k]的最大值
为了快速找到合适的k,使用优先队列 或者 单调队列 进行优化

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=105,maxm=10000+5;
int n,m,k,value[maxn][maxm],cost[maxn][maxm],dp[maxn][maxm],q[maxm],front,rear;
int main(void){while(scanf("%d%d%d",&n,&m,&k)==3 && (n||m||k)){for(int i=1;i<=n+1;++i){for(int j=1;j<=m;++j){scanf("%d",&value[i][j]);value[i][j]+=value[i][j-1];}}for(int i=1;i<=n+1;++i){for(int j=1;j<=m;++j){scanf("%d",&cost[i][j]);cost[i][j]+=cost[i][j-1];}}for(int i=1;i<=n+1;++i){for(int j=0;j<=m;++j){dp[i][j]=dp[i-1][j];}front=0;rear=-1;//左到右for(int j=0;j<=m;++j){while(front<=rear && cost[i][j]-cost[i][q[front]]>k) ++front;if(front<=rear){dp[i][j]=max(dp[i][j],dp[i-1][q[front]]-value[i][q[front]]+value[i][j]);}int t=dp[i-1][j]-value[i][j];while(front<=rear && t>=dp[i-1][q[rear]]-value[i][q[rear]])--rear;q[++rear]=j;}//从右到左front=0;rear=-1;for(int j=m;j>=0;--j){while(front<=rear && cost[i][q[front]]-cost[i][j]>k) ++front;if(front<=rear){dp[i][j]=max(dp[i][j],dp[i-1][q[front]]+value[i][q[front]]-value[i][j]);}int t=dp[i-1][j]+value[i][j];while(front<=rear && t>=dp[i-1][q[rear]]+value[i][q[rear]])--rear;q[++rear]=j;}}int ans=dp[n+1][0];for(int j=0;j<=m;++j){ans=max(ans,dp[n+1][j]);}printf("%d\n",ans);}return 0;
}//2 2 2
//7 8
//4 5
//1 2
//1 1
//1 1
//1 1
//0 0 0//1 2 2
//4 5
//1 2
//1 1
//1 1
//0 0 0

UVA - 1427 Paradev单调队列相关推荐

  1. URAL 1427. SMS(DP+单调队列)

    题目链接 我用的比较传统的办法...单调队列优化了一下,写的有点搓,不管怎样过了...两个单调队列,存两个东西,预处理一个标记数组存... 1 #include <iostream> 2 ...

  2. UVA 1471 Defense Lines 单调队列优化

    题意:给出长度为N的序列,现在让你删除一个连续的.任意长度的序列,从而形成一个最长的上升子序列. 思路:第一遍看错题了,以为是标准的最长上升子序列,然后就错了. 再看一遍题意,其实只是让你删除一个连续 ...

  3. 0x12.基本数据结构 — 队列与单调队列

    目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...

  4. 入门经典_Chap08_题解总结:极角扫描法 滑动窗口 单调队列 单调栈

    总结  本章主要关注一个重要的问题 – 单调队列和单调栈的使用  同时还有一些其他的问题,如扫描法,递归的思想, 构造, 分治, 二分等 知识点 单调队列 和 单调栈 题目 UVA - 1606 Am ...

  5. 单调队列多重背包时间复杂度O(vn)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...

  6. 洛谷 P2219修筑绿化带 二维单调队列~

    题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...

  7. P2216 理想的正方形 单调队列 (二维)

    题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...

  8. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  9. 解题报告:Fake Maxpooling(单调队列求矩阵的和)

    我们不妨先把这个问题中二维的矩阵简化成一维的数列.那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值 ...

  10. 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★

    P1419 寻找段落 首先二分答案,即:二分最大平均值. 我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值. 用前缀和和单调队列维护. ...

最新文章

  1. 【发现】Pandora's Box Puzzle Game of the Year Edition 原版镜像
  2. tkinter回调异常_Python tkinter文本修改后的回调
  3. 每个程序员都必须遵守的编程原则
  4. 崛企问卷调查小程序模块V1.3.2
  5. HP 8770W windows10 1803 安装 HP 3D DriveGuard
  6. 用matlab解决马尔可夫模型,MatLa工具箱b 马尔可夫模型的MatLab程序
  7. 【vue手写图片预览组件】在vue2.0项目中手写图片预览组件,旋转、放大、滚动、下载等功能
  8. 随着无人机将承担更多的作战任务,“AI辅助空战”或将应运而生
  9. vue element UI 学习总结笔记(十一)_vue中打印模板设置
  10. c#winform利用opencvsharp的Floodfill实现类似PS魔棒功能
  11. 使用acmesh免费开启https(详细概念介绍与操作步骤记录)
  12. 经典工作自我鉴定范文/实习自我鉴定表
  13. android增加来电闪光灯功能吗,苹果/安卓手机闪光灯提醒功能:手机来电闪光灯提醒怎么设置?...
  14. sourcetree出现提交成功但推送失败的问题
  15. 日语 | 日本50音
  16. Activity生命周期和启动模式
  17. 数学建模:非线性规划的 Python 求解
  18. 如何完美安装微软必应输入法
  19. Halcon学习(一) 初识Halcon HDevelop下载安装
  20. SSM大学生公益义工主题管理-义工服务-志愿者报名审核javaweb网站j2ee项目

热门文章

  1. siteground主机黑五优惠最低2折-2.99美元每月-vps主机-WordPress主机服务器
  2. 视频数据丢失怎么办 怎样找回丢失的视频数据
  3. iOS帐号、证书之漫谈(三)—— 申请Apple ID
  4. applet java_Java—Applet
  5. 华为轮值董事长郭平新年致辞:不经艰难困苦,何来玉汝于成
  6. 冗余系统服务器切换的因素,揭秘 | 自动化冗余系统
  7. Android:H5 通过 URL Scheme 拉起app应用
  8. coursera 助学金申请模版
  9. 【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
  10. 如何实现 Android 短视频跨页面的流畅续播?