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列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...
随机推荐
- MHA 高可用架构部署
一, MHA 介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公 ...
- ELK 插件(一) ---- head
一, 插件介绍 01, ElasticSearch Head是什么? ElasticSearch Head是集群管理.数据可视化.增删查改.查询语句可视化工具.可以对集群进行傻瓜式操作.你可以通过插件 ...
- Python 中数据的序列化和反序列化(json处理)
概念: JSON(JavaScript Object Notation):是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming ...
- C# 获取字符串长度
int leng = System.Text.Encoding.Default.GetBytes(attachfileId2).Length;
- MVC 下拉框获取值和赋值(多选)
1.视图 <div class="form-group"> @Html.LabelFor(m => m.Positions, new { @class = &qu ...
- MVC类库视图在UI使用方法
在类库中固定文件:Controller Views 引用一下两个程序集(类库和UI项目都需要引用)(似乎只需要引用mvc的,build似乎在引用文件中不见了?有空测试一下) 如此方式,一个登录需要是 ...
- oracle OTT 学习
1.OTT概念 OTT 是 Object Type Translator 的缩写,对象类型转换器.它是用来将数据库中定义的类型(UDT)转换为C结构体类型的工具.借助OTT 可以用C语言调用OCI来访 ...
- Java线程同步打印ABC
需求: 三个线程,依次打印ABCABCABC.... 方案一: 使用阻塞队列,线程1从队列1获取内容打印,线程2从队列2获取内容打印,线程3从队列3中获取内容打印.线程1把B放到队列3中,线程2把C放 ...
- oracle学习篇九:同义词
Oracle数据库中提供了同义词管理的功能.Oracle同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性. 在Oracle中对用户的管理是使用权限的方式来管理的,也就是说, ...
- node:fs-extra模块
var fs = require('fs-extra'); //复制 并会覆盖已有文件 fs.copy('./demo/index.html','./demo/index2.html' ,(err) ...