x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。(注:起點或終點重疊,不算重疊)。
例如:[1 5][2 3][3 6],可以選[2 3][3 6],這2條線段互不重疊。
input
第1行:1個數n,線段的數量(2 <= n <= 10000)output第2 - n + 1行:每行2個數,線段的起點和終點(-10^9 <= s,e <= 10^9)
輸出最多可以選擇的線段數量。input示例
3output示例1 52 3
3 6
2
思路:按照終點公升序排序,然後按照類似最長遞增子串行的方法dp一下,
遍歷到一條線段時,如果它的起點大於前面某一條線段的終點,不重疊線段個數就等於已經求出的它前面的那條線段的不重疊個數+1
#include#includeusing namespace std;
struct nodea[10005];
int dp[10005];
bool cmp(node x,node y)
} int ans=0;
for(i=0;ians=max(ans,dp[i]);
cout
}
1133 不重疊的線段 (貪心)
x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。input 第1行 1個數n,線段的數量 2 n 10000 第2 n 1行 每行2個數,線段的起點和終點 10 ...
51Nod1133 不重疊的線段
x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。經典的序列上的區間問題。明顯的貪心 把右端點從小到大排乙個序 第一關鍵字 左端點從小到大排乙個序 第二關鍵字 然後...
51Nod 1133 不重疊的線段
x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。input 第1行 1個數n,線段的數量 2 n 10000 第2 n 1行 每行2個數,線段的起點和終點 10 ...