修理牛棚 貪心 USACO

2022-05-12 21:36:07 字數 1642 閱讀 9670

今天開始終於可以刷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 18

3 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個大的空隙 用第乙個奶牛到最後乙個奶牛之間的距離 減去這幾個空隙 就是最小的答案!?!

真棒!貼**啦

#includeusing

namespace

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越大值反而...