各种类型的线段覆盖问题

问题1

  • 问题描述:1 - L的一维区间上,有n条线段,线段两端点分别为li,ri。求覆盖全部的最小线段条数。
  • 问题分析:贪心。贪心策略:按 l 小 r 大的排序方式排序,得到第一条从 l 1 _1 1=1 出发且 r 1 _1 1最大的线段,则第二条线段的 l 2 _2 2 需要 <= r 1 _1 1,且r 2 _2 2尽可能大。同理第三条线段的 l 3 _3 3<=r 2 _2 2且r 3 _3 3尽可能大。以此类推,很容易感觉到,该贪心策略已是最优策略。

问题2

  • 问题描述:1 - L的一维区间上,有n条线段,线段两端点分别为li,ri。求不重叠的最大覆盖。
  • 问题分析:动态规划。将线段先按 r 大 l 小的顺序先排序。
    设 f[i] 为从区间 1 - i 的最大覆盖。vector存储以 r 为下标的 l 。dp从1 - L,若有以 i 为 r 的线段,则考虑是否放入该线段。
    很显然的一点:dp数组一定是递增废话
    不放入该线段则继承:dp[i] = dp[i-1],
    放入该线段则:dp[i]=max(dp[vec[i][j]-1]+r-l+1),0<=j<vec[i].size()

问题3

  • 问题描述:1 - L的一维区间上,有n条线段,线段两端点分别为li,ri,线段的权值为vi。求不重叠的最大权值和。
  • 问题分析:动态规划。和问题2的方法基本一样,只不过问题2的线段的权值是线段的长度:r-l+1。而现在的权值是给定的vi。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值