动规:线段覆盖

描述
数轴上有 n(n ≤ 1000) 条线段,线段的两端都是整数坐标,坐标范围在 0 ∼ 1000000,每条线
段有一个价值,请从 n 条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线

段价值之和最大。


输入
第一行一个整数 n,表示有多少条线段。
接下来 n 行每行三个整数, a i ,b i ,c i ,分别代表第 i 条线段的左端点 a i ,右端点 b i (保证左端点

< 右端点)和价值 c i 。


输出

输出能够获得的最大价值


样例输入
3
1 2 1
2 3 2
1 3 4
样例输出

4


分析
先将线段排序。按照右端点从小到大排序。原因是循环结构中是 i 从 1 到 n, i 比较小的时候尽
可能选右端点比较小的,这样才可以为后面的线段留下更大的空间。
设状态为 f[i],表示前 i 条线段时,选上第 i 条线段,能获得的最大价值。状态转移方程如下:
       f[i] = max{f[j]} + c[i],2 ≤ i ≤ n,1 ≤ j ≤ i − 1,且 b[j]<=a[i]
b[j]<=a[i] 表示 j 的右端点在 i 的左端点左边,即不重合。
输出 f[i] 数组中的最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值