USACO1 3 2修理牛棚

2021-08-04 02:28:23 字數 1184 閱讀 6510

這道題多半是個貪心,找出連續牛棚覆蓋,然後覆蓋住間隔最小的空隙 ,直到用了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越大值反而變小,因為m大了的話它的含義就是雖然相鄰但時仍舊用多塊木板

要先排序

o(mc|mlog2m)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=205;

int m,s,c,ans,cc,mx,mi=500;

vector

v;bool vis[maxn];

void init()

ans=c;

}void solve()

}//cout}

sort(v.begin(),v.end());

for(int i=0;icout

這裡的嗎mx和mi比較重要,記錄開始和結束的下標,如果不記錄就有可能把第乙個數和最後乙個數的前面和後面記錄進去,是無用的,答案也就錯了,樣例比較良心,然後也有點警覺,還是沒栽

dp「`

/* f(i,j)表示前i塊木頭覆蓋前j個牛棚的最小長度

f[1][j]=1;

f(i,j)=min(f(i-1,j-1)+1,f(i-1,j)+a[j]-a[j-1]) */

using namespace std;

const int maxn=205;

int m,s,c,ans,f[55][205],a[maxn];

void init()

void dp() }

/*for(int i=1;i<=m;i++)

{ for(int j=1;j<=c;j++)

{ cout<

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...

修理牛棚 貪心 USACO

今天開始終於可以刷usaco的題啦 準備每一道都發乙個題解 時間限制 1 sec 記憶體限制 128 mb 提交 9 解決 7 提交 狀態 討論版 命題人 外部匯入 題目描述 1.3.2 barn repair 修理牛棚 barn1.pas c cpp 在乙個夜黑風高,下著暴風雨的夜晚,farmer...