十二年前的zjoi我現在還切不過我是不是可以退役了
傳送門:
西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 \times 88×8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。
而我們的主人公小q
,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w
決定將棋盤擴大以適應他們的新規則。
小q
找到了一張由n \times mn×m個正方形的格仔組成的矩形紙片,每個格仔被塗有黑白兩種顏色之一。小q
想在這種紙中裁減一部分作為新棋盤,當然,他希望這個棋盤盡可能的大。
不過小q
還沒有決定是找乙個正方形的棋盤還是乙個矩形的棋盤(當然,不管哪種,棋盤必須都黑白相間,即相鄰的格仔不同色),所以他希望可以找到最大的正方形棋盤面積和最大的矩形棋盤面積,從而決定哪個更好一些。
於是小q
找到了即將參加全國資訊學競賽的你,你能幫助他麼?
包含兩個整數nn和mm,分別表示矩形紙片的長和寬。接下來的nn行包含乙個n \ \times mn×m的0101矩陣,表示這張矩形紙片的顏色(00表示白色,11表示黑色)。
包含兩行,每行包含乙個整數。第一行為可以找到的最大正方形棋盤的面積,第二行為可以找到的最大矩形棋盤的面積(注意正方形和矩形是可以相交或者包含的)。
輸入 #1複製
3 31 0 1
0 1 0
1 0 0
輸出 #1複製
46
對於20\%20%的資料,n, m ≤ 80n,m≤80
對於40\%40%的資料,n, m ≤ 400n,m≤400
對於100\%100%的資料,n, m ≤ 2000n,m≤2000
dp好題
定義狀態「擴充套件」,表示在僅僅在當前行/列嚴格滿足相鄰兩個數相反的數
我們設l(i,j)表示點(i,j)往左擴充套件最遠能擴充套件到的點的縱座標,設r(i,j)表示點(i,j)往右擴充套件能擴充套件到的點的座標
定義up(i,j)表示點(i,j)往上擴充套件最遠能擴充套件到的點的橫座標
這個dp真的太巧妙了orz自己看**領會吧
#include#define ll long long#define fill(a,b) memset(a,b,sizeof(a))
using
namespace
std;
const
int maxn=2010
;int
n,m,flag[maxn][maxn],l[maxn][maxn],r[maxn][maxn],pps[maxn][maxn],ans,aans;
intmain()
for (int i=1;i<=n;i++)
for (int j=2;j<=m;j++)
if (flag[i][j]!=flag[i][j-1
]) l[i][j]=l[i][j-1
];
for (int i=1;i<=n;i++)
for (int j=m-1;j>=1;j--)
if (flag[i][j]!=flag[i][j+1
]) r[i][j]=r[i][j+1
];
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
int x=r[i][j]-l[i][j]+1,y=min(x,pps[i][j]);
ans=max(ans,y*y),aans=max(aans,x*pps[i][j]);
}printf(
"%d\n%d
",ans,aans);
return0;
}
ZJOI2007 棋盤製作
題目描述 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w...
棋盤製作 ZJOI2007
題目傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小...
ZJOI2007 棋盤製作
傳送門 dp找給定區域內最大符合條件的矩形 正方形。這裡有一種新的方法 懸線法。懸線的定義 每個點 i,j 都對應一條懸線,當前點是懸線的下端,懸線的上端為乙個障礙點或者矩形的上邊界。所以乙個符合條件的矩形,我們只要使用懸線法計算出這條懸線移動到不合法位置時的邊界即可。注意left和right似乎在...