week3作業 區間覆蓋

2021-10-03 19:08:06 字數 1451 閱讀 8339

主要思路:

一道簡單的貪心應用

從左至右覆蓋,r_covered記錄已覆蓋的區域的右端點(初始值為0)

將區間按照左端點排序(可以不用考慮右端點的順序)

在區間集合s中選出乙個右端點最大的(貪心原則)

集合s是左端點在r_covered左側(可相等)的區間集合

執行上述迴圈直至(二選一):

r_covered大於等於要求覆蓋區間的右端點

s為空集

若從1跳出迴圈則輸出所用區間數;從2跳出則輸出-1

選出最少的區間進行覆蓋,顯而易見我們要盡可能地選取長的區間。這裡的「長」是指「有效長」——即超出已覆蓋區域的長度,因為我們並不需要重疊的覆蓋。因此,我們對區間進行排序的依據便是區間的右端點。

c - 區間覆蓋

數軸上有 n (1<=n<=25000)個閉區間 [ai, bi]

選擇盡量少的區間覆蓋一條指定線段 [1, t](1<=t<=1,000,000)

覆蓋整點,即(1,2)+(3,4)可以覆蓋(1,4)。

不可能辦到輸出-1

input

第一行:n和t

第二行至n+1行: 每一行乙個閉區間。

output

選擇的區間的數目,不可能辦到輸出-1
sample input

3 10

1 73 6

6 10

sample output

2
#include

#include

#include

using

namespace std;

typedef

struct tag_interval

bool

operator

<

(const tag_interval& x)

const

}interval;

intmain()

}sort

(v.begin()

,v.end()

);while

(!v.

empty()

)if(v[i]

.l>r_covered+1)

break;}

if(flag)

else}if

(r_covered>=t)

printf

("%d\n"

,cnt)

;else

printf

("-1\n");

return0;

}

區間覆蓋(week3 作業C)

描述 數軸上有 n 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1 輸入 注意,輸入包含多組測試資料,請處理到檔案結束 第一行 n和 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1 樣例輸入 3 10 1 73 6 6 10 樣例輸...

week3作業 C 區間覆蓋

描述 數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1 輸入 第一行 n和t 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1...

Week3 作業C 區間覆蓋

數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1 第一行 n和t 第二行至n 1行 每一行乙個閉區間。選擇的區間的數目,不可能辦到輸出 1。3 10 1 7...