bzoj1057 ZJOI2007 棋盤製作

2021-08-18 18:18:48 字數 1572 閱讀 5099

傳送門

圖上的棋子有兩種型別:

1.黑格行列奇偶性相同,白格不同

2.白格行列奇偶性相同,黑格不同

判斷同不同的話,直接異或就可以了。

然後問題就轉化為求最大01子矩陣了

感覺這個真的挺巧妙的,要是不轉化的話,大概會寫吐?

以下是一些廢話。。(沒錯我越來越話癆了

統計矩形本來寫了懸線法,然後有個地方忘記了怎麼寫,就寫錯了,結果竟然只有vijos上tle(沒錯我就是有每個oj交一遍的癖好)。洛谷的資料實在太水,bzoj大概是由於算總時間的吧。然後重新學了懸線法覺得好煩啊就寫了單調佇列。然而我以前也沒寫過單調佇列的方法,就聽別人講過一次,但是忘得差不多了,而且當時好像也一知半解,只知其然而不知其所以然。於是我又成功寫錯了。。但是後來自己仔細推了一下,在晚自習最後十分鐘切了。果然乙個演算法還是要自己想一遍寫一遍才能真正理解啊!(然而我就是太懶)

#include#include#includeusing namespace std;

const int n=2001;

int n,m,a[n][n],f[n][n],up[n][n],jx[n],h[n],l,ans1,ans2;

void read(int &x)

int main()

// for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cout<1&&h[l-1]>=h[l];l--)

}ans2=max(ans2,h[l]*(m-jx[l]+1));

for(int j=l-1;j>0;j--) ans2=max(ans2,h[j]*(m-jx[j]+1));}}

cout《還有乙個辣雞並且是假的懸線法,但是在洛谷和bzoj可以過

#include#include#includeusing namespace std;

const int n=2001;

int n,m,a[n][n],f[n][n],up[n][n],l[n][n],r[n][n],ans1,ans2;

void read(int &x)

int main()

// for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cout<=up[i][j]&&a[i][j]==o)

memset(r,0,sizeof r);

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

for(int j=1;j<=m;j++)

if (up[i][j+1]>=up[i][j]&&a[i][j]==o)

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

for(int j=1;j<=m;j++)

ans2=max(ans2,(l[i][j]+1+r[i][j])*up[i][j]);

}// for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cout

}

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決定 將...