用 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。接...