USACO巨大牛棚(DP)

2021-10-21 12:20:12 字數 1235 閱讀 8603

農夫約翰想在他的正方形農場中建乙個巨大的正方形牛棚。

他不願意在農場中砍伐樹木,因此,他想要找一片平坦的土地,可以讓他不需伐木就可直接在那裡進行牛棚的搭建。

為了達到這一目的,我們將他的農場劃分為 n×n 個方格區域。

給定包含樹木的方格區域的數量,以及這些區域的具體位置。

請你計算,他在不砍伐樹木的情況下,最大可以建造多大的牛棚。

搭建牛棚時,牛棚的四個邊必須是水平或垂直的。

下面是乙個農場的示例,其中,包含樹木的方格區域用 「#」 表示,不包含樹木的方格區域用 「.」 表示,具體表示為:

1 2 3 4 5 6 7 8

1 . . . . . . . .

2 . # . . . # . .

3 . . . . . . . .

4 . . . . . . . .

5 . . . . . . . .

6 . . # . . . . .

7 . . . . . . . .

8 . . . . . . . .

可建造的最大牛棚的尺寸為 5×5,具體位置在右下角。

輸入格式

第一行包含兩個整數 n 和 t,分別表示農場尺寸以及包含樹木區域的數量。

接下來 t 行,每行包含兩個整數 x,y,表示第 x 行第 y 列的方格區域內包含樹木。

輸出格式

輸出乙個整數,表示可建造的最大牛棚的邊長。

資料範圍

1≤n≤1000

,1≤t≤10000

,1≤x,y≤n

輸入樣例:83

2226

63輸出樣例:

5

#include

#include

#include

using

namespace std;

const

int n =

1010

;int n, m;

int g[n]

[n], f[n]

[n];

//f[i][j]表示以(i,j)點為右下角的最大正方形邊長

intmain()

int res=0;

for(

int i=

1;i<=n;i++)}

} cout << res << endl;

return0;

}

USACO5 3 巨大的牛棚Big Barn

usaco 5.3.4 農夫約翰想要在他的正方形農場上建造一座正方形大牛棚。他討厭在他的農場中砍樹,想找乙個能夠讓他在空曠無樹的地方修建牛棚的地方。我們假定,他的農場劃分成 n x n 的方格。輸入資料中包括有樹的方格的列表。你的任務是計算並輸出,在他的農場中,不需要砍樹卻能夠修建的最大正方形牛棚。...

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