题目链接: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 多段图的更多相关文章

  1. Expm 4_1 多段图中的最短路径问题

      [问题描述] 建立一个从源点S到终点T的多段图,设计一个动态规划算法求出从S到T的最短路径值,并输出相应的最短路径. 解 package org.xiu68.exp.exp4; public cl ...

  2. 多段图动态规划dp

    多段图问题是DP的基础题目.大体的意思是有一个赋权有向图,其顶点集被分为几个子集.求经过每个子集从源点到终点的最短路径 import java.util.ArrayList; import java. ...

  3. LA 2797 (平面直线图PLSG) Monster Trap

    题意: 平面上有n条线段,一次给出这n条线段的两个端点的坐标.问怪兽能否从坐标原点逃到无穷远处.(两直线最多有一个交点,且没有三线共交点的情况) 分析: 首先说明一下线段的规范相交:就是交点唯一而且在 ...

  4. LA 4327 Parade(单调队列优化dp)

    题目链接: 题目大意(摘自刘汝佳<<算法竞赛入门经典--训练指南>>):F城是由n+1条横向路和m+1条竖向路组成.你的任务是从最南边的路走到最北边的路,使得走过的路上的高兴值 ...

  5. UVA116 单向 DSP(多段图最短路)

    单向 DSP [题目链接]单向 DSP [题目类型]dp &题解: 紫书P271 这块的字典序排序我觉得挺厉害的,每次都把那3步sort一下,之后if (v< d[i][j]) 这块的小 ...

  6. UVa 116 (多段图的最短路) Unidirectional TSP

    题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...

  7. UVA - 116 Unidirectional TSP 多段图的最短路 dp

    题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...

  8. NOI 7614 最低通行费(多段图最短路)

    http://noi.openjudge.cn/ch0206/7614/ 题意: 有一个N*N的正方形网格,商人从网格的左上角进,右下角出.每穿越中间1个小方格,都要花费1个单位时间.商人必须在(2N ...

  9. UVa 116 单向TSP(多段图最短路)

    https://cn.vjudge.net/problem/UVA-116 题意:给出m行n列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...

随机推荐

  1. Python学习 day07

    一.关于解决问题的思路 1.删除列表中索引为单数的元素. 别人的思路: 利用切片 li = [11, 22, 33, 44, 55] li = li[::2] print(li) 思考:虽然学了pyt ...

  2. PIXI 根据点走地图(8)

    先了解下数学公式例如: 图已知:a.b两点的坐标, c到a的距离d .求c点的坐标.   求 cy 可以根据d / a到b距离 = a到c垂直距离 / a 到 b的垂直距离.   首先求a到b的距离 ...

  3. python 计数器Counter

    from collections import Counter colours=( ('Yasoob','Yellow',1), ('Ali','Blue',2), ('Arham','Green', ...

  4. MySQL 常用show 语句

    1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称. 2. show databases; -- 显示mysql中所有数据 ...

  5. (转)python编写登录接口

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://506554897.blog.51cto.com/2823970/1907262 ...

  6. 案例42-使用ajax获取crm中的客户列表

    1webcontent部分 1 修改menu.jsp代码 2 jsp/customer/list.jsp代码 <%@ page language="java" content ...

  7. Java实现Ip代理池

    设置Ip代理很多时候都会有用到,尤其是在写爬虫相关项目的时候.虽然自己目前没有接触这种需求,但由于最近比较闲,就写着当作练习吧 爬取代理IP 爬取 关于爬取代理IP,国内首先想到的网站当然是 西刺代理 ...

  8. android 学习资源网址

    脚本之家: http://www.jb51.net/list/list_233_2.htm csdn: http://blog.csdn.net/xubo578/article/details/571 ...

  9. pat09-散列3. Hashing - Hard Version (30)

    09-散列3. Hashing - Hard Version (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HE, Qin ...

  10. Flask 框架理解(一)

    Flask 框架理解(一) web 服务器 , web 框架 以及 WSGI 这里说的 web 服务器特指纯粹的 python HTTP 服务器(比如 Gunicorn,而不是 Apache,Ngin ...