USACO5 3 巨大的牛棚Big Barn

2022-05-01 05:39:12 字數 1487 閱讀 4302

(usaco 5.3.4)

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

example

考慮下面的方格,它表示農夫約翰的農場,『.'表示沒有樹的方格,『#'表示有樹的方格

1 2 3 4 5 6 7 8

1 . . . . . . . .

2 . # . . . # . .

3 . . . . . . . .

4 . . . . . . . .

5 . . . . . . . .

6 . . # . . . . .

7 . . . . . . . .

8 . . . . . . . .

最大的牛棚是 5 x 5 的,可以建造在方格右下角的兩個位置其中乙個。

輸入格式:

line 1: 兩個整數: n (1 <= n <= 1000),農場的大小,和 t (1 <= t <= 10,000)有樹的方格的數量

lines 2..t+1: 兩個整數(1 <= 整數 <= n), 有樹格仔的橫縱座標

輸出格式:

只由一行組成,約翰的牛棚的最大邊長。

輸入樣例#1:

8 3

2 22 6

6 3

輸出樣例#1:

5

題目翻譯來自nocow。

usaco training section 5.3

dp方程:f[i][j]=min(f[i-1][j-1],f[i-1][j],f[i][j-1])+1;

1 #include2 #include3

using

namespace

std;

4const

int maxn=1e3+10;5

intn,t,ans;

6int

f[maxn][maxn];

7bool

v[maxn][maxn];

8int

main()

15for(int i=1;i<=n;i++)

16for(int j=1;j<=n;j++)

17if(!v[i][j]) ans=max(ans,f[i][j]=1+min(f[i-1][j-1],min(f[i-1][j],f[i][j-1

])));

18 printf("

%d\n

",ans);

19return0;

20 }

順便,p1387 最大正方形也可以怎麼做,或者o(n3)暴力可過;

USACO 5 3解題報告

題目翻譯 搜尋,以桶的數量,桶的數量上限,剩餘牛奶量為參量進行搜尋。乙個桶可以使用c 剩餘牛奶量 桶的容量次,分別對使用1 c次該桶的情況進行搜尋 同時,但凡出現桶的容量大於當前答案便進行剪枝。題目翻譯 插入新視窗時,將新視窗的高度置於當前最小 置頂時,將視窗的高度置於當前最小 置底時,將視窗高度置...

USACO巨大牛棚(DP)

農夫約翰想在他的正方形農場中建乙個巨大的正方形牛棚。他不願意在農場中砍伐樹木,因此,他想要找一片平坦的土地,可以讓他不需伐木就可直接在那裡進行牛棚的搭建。為了達到這一目的,我們將他的農場劃分為 n n 個方格區域。給定包含樹木的方格區域的數量,以及這些區域的具體位置。請你計算,他在不砍伐樹木的情況下...

巨大的棋盤

小a站在乙個巨大的棋盤上。這個棋盤可以看成是乙個網格圖。這個網格圖的大小為n m。左上角座標為 1,1 右下角座標為 n,m 這個棋盤很特別,他每行每列都是乙個環。具體來說,當小a站在第一行,他往上走的時候,他會走到第n行,站在第n行往下走會走到第一行。對於第一列和第m列類似。小a在棋盤上可以上下左...