今天開始終於可以刷usaco的題啦
準備每一道都發乙個題解
時間限制: 1 sec 記憶體限制: 128 mb
提交: 9 解決: 7
[提交] [狀態] [討論版] [命題人:外部匯入]
題目描述
1.3.2 barn repair 修理牛棚
(barn1.pas/c/cpp)
在乙個夜黑風高,下著暴風雨的夜晚,farmer john的牛棚的屋頂、門被吹飛了。
好在許多牛正在度假,所以牛棚沒有住滿。 牛棚乙個緊挨著另乙個被排成一行,牛就住在裡面過夜。 有些牛棚裡有牛,有些沒有。
所有的牛棚有相同的寬度。 自門遺失以後,farmer john必須盡快在牛棚之前豎立起新的木板。
他的新木材**商將會**他任何他想要的長度,但是吝嗇的**商只能提供有限數目的木板。 farmer john想將他購買的木板總長度減到最少。
給出:可能買到的木板最大的數目m(1<=
m<=50);牛棚的總數s(1<= s<=200); 牛棚裡牛的總數c(1 <= c
<=s);和牛所在的牛棚的編號stall_number(1 <= stall_number <=
s),計算攔住所有有牛的牛棚所需木板的最小總長度。 輸出所需木板的最小總長度作為答案。
program name: barn1
input format:
(file barn1.in)
output format:
(file barn1.out)
單獨的一行包含乙個整數表示所需木板的最小總長度。
4 50 183 4
6 8
1415
16 17
2125
26 27
30 31
40 41
42 43
25[ 一種最優的安排是用板攔牛棚3-8,14-21,25-31,40-43.]
提示usaco-01
這一道題其實並不難
標籤說是貪心
輸出所需木板的最小總長度作為答案。
這一道題其實只要想明白了 模擬一下輕鬆出答案!
題目大意整理一下是這樣的
就是說有m塊木板
有s個牛棚(會告訴你位置)
可以用這些模板來擋住牛棚 問最少一共要用多長的木板
這一道題可以轉換一下思路
假如一共用4塊木板
那麼就相當於分出了4塊區域 也就相當於中間夾著3個空隙
也就是說!!!出正解了。。
列舉前3個大的空隙 用第乙個奶牛到最後乙個奶牛之間的距離 減去這幾個空隙 就是最小的答案!?!
真棒!貼**啦
#includeusingnamespace
std;
int a[205],dis[205
];bool cmp(int a,int b)//
過載函式
intmain()
USACO 修理牛棚
同樣是一道貪心題,我的思路是用乙個陣列存下所有的空擋,對空擋進行排序,然後再在總長度中減去前m 1 大的空檔長度。關鍵還是理解題意。貌似洛谷 oj不支援 int min 之類的。還有要對初始資料排一次序,害我 wa了一次。include include includeusing namespace ...
(usaco)修理牛棚 Barn Repair
題目傳送門sxazr 本題可以這樣想我這蒟蒻沒想出 一條超長木板把所有牛棚覆蓋,然後從中截去m 1段,就剩下m段了 這樣就可以簡單的貪心了 把每個有牛的牛棚之間的距離從大到小排序 截去最大的m 1個就好了。include include include using namespace std int...
USACO1 3 2修理牛棚
略 這道題多半是個貪心,找出連續牛棚覆蓋,然後覆蓋住間隔最小的空隙 直到用了m塊,實現起來有一點技巧 o s 我覺得還可以dp f i,j 表示前i塊木頭覆蓋前j個牛棚的最小長度 f 1,1 j f i,j min f i 1,j 1 1,f i 1,j a j a j 1 這裡不用擔心m越大值反而...