傳送門
題目簡單描述:找到給定矩形中,最大的,只有對角線為1的正方形。
既然又是從矩形找正方形,於是又想故技重施使用懸線法,預處理每個值為1的點到周圍最多能拓展幾個值為0的點。不過之後發現這樣做還是很暴力,每次只能從左上(右上)轉移,想著當時暴力判斷能否轉移。
但是其實沒必要這麼做,而且這樣複雜度也比較高。正解的確預處理了每個點能拓展的距離,不過下面就不用了(因為你是從上向下走的),之後還是老套路,只能從左上(右上)三個點轉移過來,不過這次左上(右上)是實際的dp值,其他方向都是事先預處理好的最大能拓展為0的長度。
這個取最小和上一道題是同理的,都要滿足約束條件。之後這個題就很愉快的完成了。
看一下**。
#include#include#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
using
namespace
std;
typedef
long
long
ll;const
int m = 2505
;const
int inf = 1000000009
;int
read()
while(ch >= '
0' && ch <= '9'
)
return ans *op;
}int
n,m,l[m][m],u[m][m],dp[m][m],ans;
bool
g[m][m];
intmain()
memset(dp,
0,sizeof
(dp));
memset(l,
0,sizeof
(l));
rep(i,
1,n)
per(j,m,1)
printf(
"%d\n
",ans);
return0;
}
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 ...