luogu1736 創意吃魚法 二維dp

2021-08-31 04:07:00 字數 1061 閱讀 7372

簡單來說,就是給你乙個0/1矩陣,讓你找這樣乙個正方形:一條對角線全是1,其他地方全是0,並使得這個矩陣的邊長最大

考慮維護乙個s1[i][j]表示從(i,j)開始,往上連續0的長度,s2[i][j]表示向左的

這樣向左斜的就這樣f[i][j]=min(f[i-1][j-1],min(s1[i-1][j],s2[i][j-1]))+1;向右斜的同理

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

inline int read()

while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();

return x*f;

}const int n=3000;

int f[n][n];

int s1[n][n];// up

int s2[n][n];

int a[n][n];

int main()

} int ans=0;

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

else

f[i][j]=min(f[i-1][j-1],min(s1[i-1][j],s2[i][j-1]))+1;

ans=max(ans,f[i][j]);

} }memset(s1,0,sizeof(0));

memset(s2,0,sizeof(0));

memset(f,0,sizeof(f));

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

else

ans=max(ans,f[i][j]);

} }cout<

return 0;

}

LG P1736 創意吃魚法

終於找到一點dp的門路了 但還是差的遠 這個是為數不多的我自己寫出來狀態轉移方程的乙個dp題 回到家中的貓貓把三桶魚全部轉移到了她那長方形大池子中,然後開始思考 到底要以何種方法吃魚呢 貓貓就是這麼可愛,吃魚也要想好吃法 她發現,把大池子視為01矩陣 0表示對應位置無魚,1表示對應位置有魚 有助於決...

Luogu P1736 創意吃魚法

傳送門 解題思路 對角線可以是從左上角到右下角,也可以是從右上角到左下角,所以答案需要求兩次,去最大的。先討論從左上角到右下角。dp i j 為以 i,j 點為右端點的能吃到的最多的魚,由於需要子矩陣的其他地方沒有魚,所以需要兩個輔助陣列,分別統計 i,j 這點向上有多少個連續的0,向左有多少個連續...

P1736 創意吃魚法

題意 有乙個n m的01矩陣,求最長的一條由1構成的斜線的長度,這條斜線所在矩陣的其它位置都必須是0 當前的狀態時右下角那個1,x表示這個位置向左最多可以延申x個0,y表示這個位置向上最多可以延申y個0。那麼就清楚了,這個位置的狀態由左上方的那個1以及x和y轉移,是它們中最小的那個值 1 dp i ...