luoguP1736 創意吃魚法(DP)

2022-03-01 08:47:10 字數 883 閱讀 7812

傳送門

f[i][j][0] 表示從右下角到左上角,以(i,j)為起點能延伸的最大值

f[i][j][1] 表示從左下角到右上角,以(i,j)為起點能延伸的最大值

up[i][j] 表示(i,j)上面有多少個0

left[i][j] 表示(i,j)左邊有多少個0

right[i][j] 表示(i,j)右邊有多少個0

f[i][j][0] = min(f[i - 1][j - 1][0], up[i][j], left[i][j]) + 1

f[i][j][1] = min(f[i - 1][j + 1][1], up[i][j], right[i][j]) + 1

#include #include #define n 2510

#define max(x, y) ((x) > (y) ? (x) : (y))

#define min(x, y) ((x) < (y) ? (x) : (y))

int n, m, ans;

unsigned short up[n][n], left[n][n], right[n][n], f[n][n][2];

bool a[n][n];

inline int read()

int main()

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

for(j = m; j >= 1; j--)

right[i][j] = a[i][j + 1] ? 0 : right[i][j + 1] + 1;

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

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

printf("%d\n", ans);

return 0;

}

Luogu P1736 創意吃魚法

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

LG P1736 創意吃魚法

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

P1736 創意吃魚法

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