time limit: 1000 ms memory limit: 65536 kib
submit
statistic
用i來表示x座標軸上座標為[i-1,i]的長度為1的區間,並給出n(1≤n≤200)個不同的整數,表示n個這樣的區間。
現在要求畫m條線段覆蓋住所有的區間,
條件是:每條線段可以任意長,但是要求所畫線段的長度之和最小,
並且線段的數目不超過m(1≤m≤50)。
輸入包括多組資料,每組資料的第一行表示區間個數n和所需線段數m,第二行表示n個點的座標。
每組輸出佔一行,輸出m條線段的最小長度和。
5 3
1 3 8 5 11
做了幾道貪心的題,發現貪心很多情況下就是需要找一些資料的最值,例如此題,就是找到最大間隔並進行刪除,由此可見,日後在寫貪心的題目時,可以多注意一下各個資料的最值。7
#include #include int a[205], b[205];
void quick_sort(int *, int, int);///由大到小快排
int main()
quick_sort(a, 0, n - 1);///給 n 個區間降序排序,方便計算間隔距離
for(i = 0; i < n - 1; i++)
quick_sort(b, 0, n - 2);///給 n - 1 個間隔距離排序,方便取最大間隔
line_length = a[0] - a[n - 1] + 1;///當前情況下的長度
line_number = 1;///當前的線段個數
j = 0;///記錄間隔區間的位置
while(line_number < m && b[j] > 0)
printf("%d\n", line_length);
}return 0;
}void quick_sort(int *a, int l, int r)
a[i] = key;
quick_sort(a, l, i - 1);
quick_sort(a, i + 1, r);
}
此題的排序並未有特殊要求,此處我用的是快排,但是氣泡排序也可以。
另乙個區間覆蓋問題:
f - 區間覆蓋問題 sdut oj 貪心演算法
SDUT 貪心 區間覆蓋問題
d 區間覆蓋問題 description 用i來表示x座標軸上座標為 i 1,i 的長度為1的區間,並給出n 1 n 200 個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是 每條線段可以任意長,但是要求所畫線段的長度之和最小,並且線段的數目不超過m 1 m 50 inp...
sdut 2074 區間覆蓋問題(貪心)
time limit 1000ms memory limit 65536k 用i來表示x座標軸上座標為 i 1,i 的長度為1的區間,並給出n 1 m 200 個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是 每條線段可以任意長,但是要求所畫線段的長度之和最小,並且線段的...
貪心 區間覆蓋問題
區間覆蓋問題 time limit 1000ms memory limit 65536kb submit statistic discuss problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給...