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;
}

最新文章

  1. C#性能优化考虑的几个方向
  2. QBus 关注并推送实时公交信息
  3. 安装redis监控
  4. sudo source /etc/profile 提示找不到source命令
  5. linux 环境操作faq 记录
  6. Nginx日志增长过快详细分析
  7. 看了这一张GIF图你就明白什么回事了,必看的经典!--快速构建一个请假流程
  8. SSH 架构
  9. oracle SQL多表查询
  10. Hadoop生态系统之HDFS
  11. (转)tomcat 修改默认访问项目名称和项目发布路径
  12. Spark项目之电商用户行为分析大数据平台之(十)IDEA项目搭建及工具类介绍
  13. 【转载】51单片机data,bdata,idata,xdata使用注意事项
  14. 9. MyEclipse中的SVN操作手册
  15. Requests库入门——应用实例-网络图片的爬取与保存(好看的小姐姐≧▽≦)
  16. Verilog三段式状态机描述
  17. 创建&lt;Bean&gt;sessionFactory错误, init方法调用失败;嵌套异常是org.hibernate.exception。
  18. BZOJ 1491 社交网络(最短路)
  19. Head First HTML与CSS 学习笔记
  20. oracle之 oradebug 命令用法

热门文章

  1. 记一些Python(Pymysql)建表、增删改查等基础操作(小白适用)
  2. 沈阳做假证z
  3. C++中的输入输出
  4. Zabbix value cache working in low memory mode
  5. WEBAPI 增加身份验证
  6. shell知识点:${} 的神奇用法
  7. 使用dbUnit的 IDataSet 因乱序造成assert失败而采取的措施
  8. PHP + Redis 生成自定义订单编号
  9. Java实现获取命令行中的指定数据
  10. Combine 框架,从0到1 —— 4.在 Combine 中使用计时器