【題目描述】
設有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個整...