49 修理牛棚

2022-10-03 15:30:16 字數 1305 閱讀 2266

問題描述 :

在乙個暴風雨的夜晚,農民約翰的牛棚的屋頂、門被吹飛了。 好在許多牛正在度假,所以牛棚(牛棚的總數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, int

n) }

}}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。因為有些門遺失,農民約翰需要架起新的木板作為門。...