問題描述 :
在乙個暴風雨的夜晚,農民約翰的牛棚的屋頂、門被吹飛了。 好在許多牛正在度假,所以牛棚(牛棚的總數s:1<= s<=200)沒有住滿。 剩下的牛乙個緊挨著另乙個被排成一行安置在有屋頂的牛棚來過夜。 所以有些牛棚裡有牛,有些沒有。
所有的牛棚有相同的寬度,且寬度設為1。 因為有些門遺失,農民約翰需要架起新的木板作為門。 他的新木材**者將會**他任何他想要的長度,但是**者只能提供有限數目的木板。 農民約翰想將他購買的木板總長度減到最少。
計算攔住所有有牛的牛棚所需木板的最小總長度。
輸出所需木板的最小總長度作為的答案。
說明:攔住乙個牛棚需要的木板長度為1,攔住相鄰的三個牛棚則需要木板長度為3。
比如有牛的牛棚編號為:
3 5 8 10 11
並且只能使用兩塊木板,
則第一塊木板從3到5,長度為3,
第二塊木板從8到11,長度為4,
因此,需要木板的總長度為7。
輸入說明 :
第 1 行: m 和 c(用空格分開)
第 2 到 c+1行: 每行包含乙個整數,表示牛所佔的牛棚的編號。
其中:可能買到的木板最大的數目:m(1<= m<=50);
需要安置的牛的數目c(1<= c <=s)
安置後牛所在的牛棚的編號stall_number(1<= stall_number <= s)。
輸出說明 :
單獨的一行包含乙個整數表示所需木板的最小總長度
輸入範例 :
3 5246
87輸出範例 :
5思想:這題的實質是計算間隔然後排序,先計算出所有的間隔數目,然後按大小排序,用牛棚頭尾長度,減去間隔大的(不補這部分),就得到了需要求的長度.
#include int sort(int *num, intn) }
}}int
main()
;
int cow[200]=;
while (scanf("
%d %d
", &m, &c) !=eof)
sort(cow, c+1
);
for (i = 1; i <= c; i++)
sort(cowgap, c);
for (i = 1; i < m; i++)
sum = cow[c] - cow[1] - door + 1
; //單個的門是修補長度是1
printf(
"%d\n
", sum);
}return0;
}
Barn Repair修理牛棚
在乙個暴風雨的夜晚,農民約翰的牛棚的屋頂 門被吹飛了.好在許多牛正在度假,所以牛棚沒有住 滿.剩下的牛乙個緊挨著另乙個被排成一行來過夜.有些牛棚裡有牛,有些沒有.所有的牛棚有相 同的寬度.自門遺失以後,農民約翰很快在牛棚之前豎立起新的木板.他的新木材 者將會 他任何他想要的長度,但是 者只能提供有限...
USACO 修理牛棚
同樣是一道貪心題,我的思路是用乙個陣列存下所有的空擋,對空擋進行排序,然後再在總長度中減去前m 1 大的空檔長度。關鍵還是理解題意。貌似洛谷 oj不支援 int min 之類的。還有要對初始資料排一次序,害我 wa了一次。include include includeusing namespace ...
38 修理牛棚
在乙個暴風雨的夜晚,農民約翰的牛棚的屋頂 門被吹飛了。好在許多牛正在度假,所以牛棚 牛棚的總數s 1 s 200 沒有住滿。剩下的牛乙個緊挨著另乙個被排成一行安置在有屋頂的牛棚來過夜。所以有些牛棚裡有牛,有些沒有。所有的牛棚有相同的寬度,且寬度設為1。因為有些門遺失,農民約翰需要架起新的木板作為門。...