簡單來說,就是給你乙個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 ...