经典贪心问题之线段覆盖

各种类型的线段覆盖问题

本文为转载文章


问题1

问题描述:

\(1-L\)的一维区间上,有\(n\)条线段,线段两端点分别为\(l_i\),\(r_i\)。求覆盖全部的最小线段条数。

问题分析:

贪心。贪心策略:按\(l\)\(r\)大的排序方式排序,得到第一条从 \(l_1​=1\) 出发且\(r_1\)最大的线段,则第二条线段需要有\(l_2 \leq r_1\)​,且\(r_2\)​尽可能大。同理第三条线段的\(l_3\leq r_2\)\(r_3\)​尽可能大。以此类推,很容易感觉到,该贪心策略已是最优策略。

问题2

问题描述:

\(1-L\)的一维区间上,有\(n\)条线段,线段两端点分别为\(l_i\),\(r_i\)。求不重叠的最大覆盖。

问题分析:

动态规划。将线段先按\(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条线段,线段两端点分别为\(l_i\),\(r_i\),线段的权值为\(v_i\)。求不重叠的最大权值和。

问题分析:

动态规划。和问题2的方法基本一样,只不过问题2的线段的权值是线段的长度:\(r-l+1\)。而现在的权值是给定的\(v_i\)

————————————————
本文为CSDN博主「是哆啦D梦」的原创文章
原文链接:https://blog.csdn.net/weixin_43602607/article/details/115418285

posted @ 2022-10-18 10:19  windf_风岚  阅读(419)  评论(0)    收藏  举报
1