NOIP2000 題解 方格取數 DP

2021-08-03 09:57:50 字數 1155 閱讀 7727

【題目描述】

設有n*n的方格圖(n<=10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示(見樣例):

某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。

此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得取得的數之和為最大。

【題解】

2023年的這道題和2023年的烏龜器竟如此相似,會不會給人一種內定啊,應點的感覺?

烏龜棋在這裡

看到這道題就想到了dp,因為他只能走兩個方向。但是我第一次弄得時候是用了兩次簡單dp,後來證明這是錯的,因為這樣分開取只能保證第一道是最優的。

那麼什麼是雙向dp呢?就是同時dp兩個路徑。我們知道,對於乙個點[i,j],他可以從兩個方向[i,j-1]和[i-1,j]轉移過來,那兩個點四個轉移的途徑。轉移方程是這樣的:

f[i][j][k][l]=max(max(f[i][j-1][k][l-1],f[i][j-1][k-1][l]),max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]))+map[i][j]+map[k][l];
#include

#include

#include

#include

#include

using

namespace

std;

const

int n=100;

int n;

intmap[n+5][n+5];

int f[n+5][n+5][n+5][n+5];

int main()

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

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

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

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

printf("%d",f[n][n][n][n]);

return

0;}

Noip2000,方格取數題解(DP)

題目描述截自洛谷 標籤 二維dp 題解 假定是兩個速度相同的人分別從a走到b,由於題目的資料規模很小 可以用f x1,y1,x2,y2 表示第乙個人走到 x1,y1 第二個人走到 x2,y2 時可取到的最大值,四維狀態。但是注意到x1 y1 x2 y2,所以用記k x1 y1 x2 y2,將狀態就可...

NOIp2000 方格取數

設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的...

NOIP2000 方格取數

時間限制 1 sec 記憶體限制 64 mb 設有n n的方格圖,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得取得的數之和為最大。第1行 1個整...