sdutoj 2074 區間覆蓋問題

2021-09-30 00:21:29 字數 1243 閱讀 2120

用 m

mm 條線段覆蓋住 n

nn 個小區間,求 m

mm 條線段的最小長度和。

1、當 m

mm 大於等於 n

nn 時,直接輸出 n

nn 即可。

2、當 m

mm 小於 n

nn 時,先將 n

nn 個區間從小到大排好序,區間的總長度便可知道。

用 m

mm 條線段覆蓋,也就是在這片區間上進行 m−1

m-1m−

1 個分割,即減去 m−1

m-1m−

1 個空隙。

於是便有了貪心策略:儘量減少無意義的覆蓋,優先選擇區間間隔大的進行分割。

#include

#include

#include

#include

using

namespace std;

const

int n =

250;

int a[n]

, sub[n]

;bool

cmp(

int a,

int b)

intmain()

sort

(a, a + n)

;// 將小區間從小到大排序

int ans = a[n-1]

- a[0]

+1;// 總長度

for(

int i =

0; i < n -

1; i++

)// 求空隙

sub[i]

= a[i+1]

- a[i]-1

;sort

(sub, sub + n -

1, cmp)

;// 將空隙從大到小排序

for(

int i =

0; i < m -

1; i++

) ans -

= sub[i]

;printf

("%d\n"

, ans);}

return0;

}

sdut 2074 區間覆蓋問題(貪心)

time limit 1000ms memory limit 65536k 用i來表示x座標軸上座標為 i 1,i 的長度為1的區間,並給出n 1 m 200 個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是 每條線段可以任意長,但是要求所畫線段的長度之和最小,並且線段的...

1751 區間覆蓋問題

time limit 1000 ms memory limit 65536 kib problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演...

4 10區間覆蓋問題

問題描述 設x2,x2,xn是實直線上的n個點。用固定長度的閉區間覆蓋著n個點,至少需要多少個這樣的長度閉區間?設計解決此問題的有效演算法。演算法設計 對於給定的實直線上的n個點和閉區間的長度k,計算覆蓋點集的最少區間數。資料輸入 第一行有兩個整數n和k,表示有n個點,且固定長度閉區間的長度為k。接...