P3431 [POI2005]AUT-The Bus
简化题意:
给你一张网格图,每个点有其对应的权值,让你找出来一条横纵坐标都单调不降的路径,并最大化经过点的权值。
分析:
这是经典的二维数点或者二维偏序问题。
如果两维一直在变的话,我们不是很好处理,所以我们考虑对这些点排一下序,(按横纵坐标都可以)。
我一般按照横坐标来排序的。然后就变成了一维的最长不下降子序列问题。
设 \(f[i]\) 表示 以 \(i\) 这个高度为结尾的经过路径的最大权值。
则有转移 \(f[i] = max(f[j] + a[i].w) j\leq i\)
因为公交车可以延着横坐标走,所以他也可以由 \(f[i]\) 转移过来。
此外还有一个要注意的点就是公交车沿着纵坐标竖着走,要先更新高度比较小的 \(f\) 值,(我就在这里卡了好几回)
那我们一开始的排序就可以以横坐标为第一关键字,纵坐标为第二关键字排序,这样方便我们 \(dp\)。
这样的直接 \(dp\) 的复杂度是 \(O(n^2)\) 的,可以考虑用树状数组或者线段树维护一下。
树状数组常熟小,代码短,也比较好写,所以我一般选择树状数组。
最后的答案就是 \(max(f[i])\), 另外不要忘记离散化哦。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define int long long//不开long long 见祖宗·
const int N = 1e5+10;
int n,m,k,tr[N],b[N];
inline int read()
{
int s = 0,w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s = s * 10 + ch - '0'; ch = getchar();}
return s * w;
}
struct node
{
int x,y,w;
}a[100010];
bool comp(node a,node b)
{
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}
int lowbit(int x){ return x & -x; }
void chenge(int x,int val)
{
for(; x <= N-5; x += lowbit(x)) tr[x] = max(tr[x],val);
}
int ask(int x)
{
int res = 0;
for(; x; x -= lowbit(x)) res = max(res,tr[x]);
return res;
}
signed main()
{
n = read(); m = read(); k = read();
for(int i = 1; i <= k; i++)
{
a[i].x = read();
a[i].y = read();
a[i].w = read();
b[i] = a[i].y;
}
sort(a+1,a+k+1,comp);//排序
sort(b+1,b+k+1);
int num = unique(b+1,b+k+1)-b-1;
for(int i = 1; i <= k; i++) a[i].y = lower_bound(b+1,b+num+1,a[i].y)-b;//离散化
for(int i = 1; i <= k; i++)
{
int res = ask(a[i].y);//树状数组优化dp
chenge(a[i].y,res+a[i].w);
}
printf("%lld\n",ask(N-5));
return 0;
}
P3431 [POI2005]AUT-The Bus的更多相关文章
- 洛谷P3431 [POI2005]AUT-The Bus
P3431 [POI2005]AUT-The Bus 题目描述 The streets of Byte City form a regular, chessboardlike network - th ...
- 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)
网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...
- 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus
P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...
- 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)
题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...
- 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...
- bzoj 1537: [POI2005]Aut- The Bus 线段树
bzoj 1537: [POI2005]Aut- The Bus 先把坐标离散化 设f[i][j]表示从(1,1)走到(i,j)的最优解 这样直接dp::: f[i][j] = max{f[i-1][ ...
- BZOJ1537: [POI2005]Aut- The Bus
1537: [POI2005]Aut- The Bus Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 158 Solved: 100[Submit][S ...
- BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)
对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值. -------------- ...
- Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]
1537: [POI2005]Aut- The Bus Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 264[Submit][S ...
随机推荐
- Linux 基础指令2
管道符| 先执行第一个命令后执行第二个 eg:查看文件中间几行: head -n1 文件名| tail -n2 :先查看文件前n1行,然后在n1行中的后n2行 tail -n1 文件名| head - ...
- CTF常见源码泄漏总结
.hg源码泄漏 漏洞成因: hg init的时候会生成.hge.g.http://www.am0s.com/.hg/ 漏洞利用:工具:dvcs-ripperrip-hg.pl -v -u http:/ ...
- 高可用集群corosync+pacemaker之pcs安装使用
前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crms ...
- [bash] 打印到屏幕相关语法
程序: #!/bin/bash function showAlertMsg(){ echo -e "\e[1;31m"$"\e[0m" } function s ...
- Centos7安装后进不去,死活就要填licence,该怎么办?
遇到这个问题不要麻爪,跟着我做: 1 回车 2 回车 c 回车 c 回车 然后就进入系统了. 要使它联网,点右上角的开关按钮,将PCI Ethernet选择为connect状态. 我的centos7是 ...
- Python基础 读取二进制文件
问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- ""&q ...
- AD16
第三集 制作光敏小夜灯的原理图 1.点击G切换栅格的精度 2.元器件放置好之后要先布局在布线 3.布线完成后要检查电路的合理性.对应查一下电阻的个数,位置是不是符合.在原理上大概的估计是否可以. ...
- [LeetCode]105. 从前序与中序遍历序列构造二叉树(递归)、108. 将有序数组转换为二叉搜索树(递归、二分)
题目 05. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 题解 使用HashMap记录当前子树根节点在中序遍历中的位置,方便每次 ...
- 面试官:哪些场景会产生OOM?怎么解决?
这个面试题是一个朋友在面试的时候碰到的,什么时候会抛出OutOfMemery异常呢?初看好像挺简单的,其实深究起来考察的是对整个JVM的了解,而且这个问题从网上可以翻到一些乱七八糟的答案,其实在总结下 ...
- CSS 常见样式 特殊用法 贯穿线&徽章&箭头
贯穿渐变线,中间插值 如图: <h3 class="brief-modal-title"> <span>公告</span> </h3> ...