LA 4327 多段图
题目链接:https://vjudge.net/contest/164840#problem/B
题意:
从南往北走,横向的时间不能超过 c;
横向路上有权值,求权值最大;
分析:
n<=100,m<=10000
数据范围很大了,基本上要n*m;
分析每个交叉路口,每个交叉路口,可以从下一行的左边,或者下一行的右边过来;
那么这个交叉路口就是max(L[j],R[j]);
怎么得到,某一个交叉路口从左边来,可以有哪些点呢? 不可能循环跑一遍(m的范围);
就用了一个Q双端队列来维护;
怎么得到,从哪个点上来最优呢? 在这个队列中的点也不能循环跑一遍;
还是利用这个队列;维护他这个队列是单调队列就好了,
#include <bits/stdc++.h> using namespace std; #define LL long long const int maxn = ;
const int maxm = ;
LL f[maxn][maxm],t[maxn][maxm],L[maxm],R[maxm],n,m,c,d[maxn][maxm]; deque<int> Q;
int Lfunc(int j,int i) {
return d[i-][j] - f[i][j];
} int Rfunc(int j,int i) {
return d[i-][j] + f[i][j];
} int main() {
while(scanf("%lld %lld %lld",&n,&m,&c)==&&n) {
for(int i=; i<=n+; i++)
for(int j=; j<=m; j++) {
if(!j) f[i][j] = ;
else {
scanf("%lld",&f[i][j]);
f[i][j]+=f[i][j-];
}
} for(int i=; i<=n+; i++)
for(int j=; j<=m; j++) {
if(!j) t[i][j] = ;
else {
scanf("%lld",&t[i][j]);
t[i][j]+=t[i][j-];
}
} for(int i=; i<=m; i++)
d[][i] = ; for(int i=; i<=n+; i++) {
L[] = d[i-][];
Q.clear();
Q.push_back();
for(int j=; j<=m; j++) {
while(!Q.empty()&&t[i][j]-t[i][Q.front()]>c) {
Q.pop_front();
}
L[j] = d[i-][j]; //从左到达 j 的最优值
if(!Q.empty()) L[j] =max(L[j],Lfunc(Q.front(),i)+f[i][j]);
while(!Q.empty()&&Lfunc(Q.back(),i)<=Lfunc(j,i)) Q.pop_back();
Q.push_back(j);
} R[] = d[i-][m];
Q.clear();
Q.push_back(m);
for(int j=m-; j>=; j--) {
while(!Q.empty()&&t[i][Q.front()]-t[i][j]>c) Q.pop_front();
R[j] = d[i-][j];
if(!Q.empty()) R[j] = Rfunc(Q.front(),i)-f[i][j];
while(!Q.empty()&&Rfunc(Q.back(),i)<=Rfunc(j,i)) Q.pop_back();
Q.push_back(j);
}
for(int j=; j<=m; j++)
d[i][j] = max(L[j],R[j]);
} LL res;
for(int i=; i<=m; i++) {
if(!i) res=d[n+][i];
else res = max(d[n+][i],res);
}
printf("%lld\n",res);
}
return ;
}
LA 4327 多段图的更多相关文章
- Expm 4_1 多段图中的最短路径问题
[问题描述] 建立一个从源点S到终点T的多段图,设计一个动态规划算法求出从S到T的最短路径值,并输出相应的最短路径. 解 package org.xiu68.exp.exp4; public cl ...
- 多段图动态规划dp
多段图问题是DP的基础题目.大体的意思是有一个赋权有向图,其顶点集被分为几个子集.求经过每个子集从源点到终点的最短路径 import java.util.ArrayList; import java. ...
- LA 2797 (平面直线图PLSG) Monster Trap
题意: 平面上有n条线段,一次给出这n条线段的两个端点的坐标.问怪兽能否从坐标原点逃到无穷远处.(两直线最多有一个交点,且没有三线共交点的情况) 分析: 首先说明一下线段的规范相交:就是交点唯一而且在 ...
- LA 4327 Parade(单调队列优化dp)
题目链接: 题目大意(摘自刘汝佳<<算法竞赛入门经典--训练指南>>):F城是由n+1条横向路和m+1条竖向路组成.你的任务是从最南边的路走到最北边的路,使得走过的路上的高兴值 ...
- UVA116 单向 DSP(多段图最短路)
单向 DSP [题目链接]单向 DSP [题目类型]dp &题解: 紫书P271 这块的字典序排序我觉得挺厉害的,每次都把那3步sort一下,之后if (v< d[i][j]) 这块的小 ...
- UVa 116 (多段图的最短路) Unidirectional TSP
题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...
- UVA - 116 Unidirectional TSP 多段图的最短路 dp
题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...
- NOI 7614 最低通行费(多段图最短路)
http://noi.openjudge.cn/ch0206/7614/ 题意: 有一个N*N的正方形网格,商人从网格的左上角进,右下角出.每穿越中间1个小方格,都要花费1个单位时间.商人必须在(2N ...
- UVa 116 单向TSP(多段图最短路)
https://cn.vjudge.net/problem/UVA-116 题意:给出m行n列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...
随机推荐
- Unity Editor Console Pro 扩展点击定位到外部工程
链接 http://blog.csdn.net/akof1314/article/details/53232981 http://forum.china.unity3d.com/thread-2689 ...
- xlua的自定义加载
具体可以先看xlua的自定义加载的demo,那个用lamda表达式做的 我这个更好理解 主要是ReadFile2的结构问题,必须的写成这样
- mysql中字段类型是datetime时比较大小问题
select sum(studychj) as tofflinejz from afterline where studybegin >= '2010-01-01 00:00:00' and s ...
- thinkphp执行流程
1. 入口文件index.php 用户对url的访问首先被定位到http://<serverIp>/<appName>/index.php, 这里的入口文件index.php做 ...
- 从Zero到Hero,一文掌握Python关键代码
# 01基础篇 # 变量 #int one=1 some_number=100 print("one=",one) #print type1 print("some_nu ...
- git本地创建新分支并推送到远程仓库
1,在当前项目目录,从已有的分支创建新的分支(如从master分支),创建一个dev分支 git checkout -b dev 2,创建完可以查看一下,分支已经切换到dev git branch * ...
- union、except和intersect查询
1. union联合查询 (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...
- Sql server 0x80131904
这是一个比较让人纠结的错误. 背景:添加了网站的分支,要拿一个现有的数据库做一个新的数据库的东东. 首先就是还原备份,然后做代码的修改.然而在登录的时候报了这个错误.0x80131904 什么插入的列 ...
- OpenStack各组件详解和通信流程
一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...
- 软件项目技术点(2)——Canvas之获取Canvas当前坐标系矩阵
AxeSlide软件项目梳理 canvas绘图系列知识点整理 前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操 ...