dp。方型棋盤不用說,矩形棋盤每個點先維護先上能達到的最大距離v。然後dp找出以自己的v最小時向左向右能達到最大的距離l,r。
因為最大矩形棋盤的寬度肯定等於某個點的v,我們又求出了每個v對應的最長距離(r-l+1),所以正確性得以保證。
還有乙個小技巧,把橫縱座標和為奇數的點異或。就可以把原問題轉化為求最大的01矩陣了。
#include#include#include
using
namespace
std;
const
int maxn = 2000 + 10
;int
a[maxn][maxn],f[maxn][maxn],v[maxn][maxn],l[maxn][maxn],r[maxn][maxn];
int n,m,res1=0,res2=0
;int
main()
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
printf(
"%d\n
",res1*res1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
}for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
}for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
res2=max(res2,v[i][j]*(r[i][j]-l[i][j]+1
)); printf(
"%d\n
",res2);
return0;
}
BZOJ1057 ZJOI2007 棋盤製作
西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源 於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定 將...
bzoj1057 ZJOI2007 棋盤製作
傳送門 我們可以先用o nm 時間求出向左向右擴充套件的最大距離 然後o nm 列舉下端點位置 在矩形下面的邊上 計算出當高最高時的寬度,相乘後取max 正方形同理,只要取高度和寬度的min就行了。uses math var hei,a,x,y,le,ri array 0.2005,0.2005 o...
BZOJ1057 ZJOI2007 棋盤製作
西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源 於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定 將...