Link

简化题意

给你一张网格图,每个点有其对应的权值,让你找出来一条横纵坐标都单调不降的路径,并最大化经过点的权值。

分析

这是经典的二维数点或者二维偏序问题。

如果两维一直在变的话,我们不是很好处理,所以我们考虑对这些点排一下序,(按横纵坐标都可以)。

我一般按照横坐标来排序的。然后就变成了一维的最长不下降子序列问题。

设 \(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的更多相关文章

  1. 洛谷P3431 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus 题目描述 The streets of Byte City form a regular, chessboardlike network - th ...

  2. 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)

    网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...

  3. 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...

  4. 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)

    题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...

  5. 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus

    Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...

  6. 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][ ...

  7. BZOJ1537: [POI2005]Aut- The Bus

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 158  Solved: 100[Submit][S ...

  8. BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)

    对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值. -------------- ...

  9. Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 264[Submit][S ...

随机推荐

  1. 【转载】pandas常用函数

    原文链接:https://www.cnblogs.com/rexyan/p/7975707.html 一.import语句 import pandas as pd import numpy as np ...

  2. springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期

    写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...

  3. Sorting It All Out (拓扑排序+思维)

    An ascending sorted sequence of distinct values is one in which some form of a less-than operator is ...

  4. C#知识点:I/O

    一.什么是I/0流? 英文翻译:Input/Output,在程序里简单的理解为读写数据操作数据的意思.流操作是为了解决体积大数据占用太多的内存,就是分段进行操作.就跟我们吃饭一样,一口一口的吃,还没见 ...

  5. 极简显示sessionid的jsp程序 war下载

    下载地址:https://files.cnblogs.com/files/xiandedanteng/simpleJspSessionId20200103.zip 解压后得到myweb.war就是可以 ...

  6. [Java数据结构]Queue

    Queue扩展了Collection,它添加了支持根据先进先出FIFO原则对元素排序的方法. 当对Queue调用add和offer方法时,元素始终添加在Queue的末尾:要检索一个元素,就要使用一个元 ...

  7. 采用GitOps的11大原因

    Kubernetes允许我们单纯地使用声明性的配置文件来管理我们的应用部署和其他基础设施组件(例如,我们现在都是YAML开发者).这使我们能够把所有这些文件放到Git仓库中,然后把它挂到流水线上(Je ...

  8. 记一次奇怪的cookie丢失

    .net给Image控件设置一个空图片路径的时候出现丢失cookie 比如说, img_path.ImageUrl ="../"+  ds.Tables[0].Rows[0][&q ...

  9. 理解C#回调函数

    序言 本篇主要学习了C#回调函数的定义使用.欢迎各位大牛的指导. 正文 回调函数是什么? 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调 ...

  10. 蓝奏网盘CMD控制台

    LanZouCloud-CMD 2.0 基于蓝奏云API开发的CMD版蓝奏云控制台 Github : https://github.com/zaxtyson/LanZouCloud-CMD 更新说明 ...