VIJOS 1143 三方格取數

2021-06-19 01:33:27 字數 1091 閱讀 6045

jerryzhou同學經常改編習題給自己做。

這天,他又改編了一題。。。。。

設有n*n的方格圖,我們將其中的某些方格填入正整數,

而其他的方格中放入0。

某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。

在走過的路上,他取走了方格中的數。(取走後方格中數字變為0)

此人從左上角到右下角共走3次,試找出3條路徑,使得取得的數總和最大。

第一行:n (4<=n<=20)

接下來乙個n*n的矩陣,矩陣中每個元素不超過80,不小於0

一行,表示最大的總和。

4

1 2 3 4

2 1 3 4

1 2 3 4

1 3 2 4

39

各個測試點1s

多程序dp

就像傳紙條。。。恩

第一次居然ce了 忘了memset的cstring了!!!!!

f[x][y][j][k]表示第一次取到x和y

第二次取到j  x+y-j

第三次取到k x+y-k時取到的最大值

然後要判斷 可能走乙個格仔 這時候另一次要+0

#include#include#includeusing namespace std;

int s[22][22];

int f[22][22][22][22];

int m,a,b,c;

int move(int bu,int x1,int x2,int x3)

int work(int x,int y,int j,int k)

int main()

{ scanf("%d",&m);

memset(f,-1,sizeof(f));

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

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

scanf("%d",&s[a][b]);

cout<

話說不會遞推的dp了。。。

現在只會遞迴。。。

求不爆棧

noip rp++

解題報告 Vijos1143 三取方格數

還記得馬攔過河卒嗎?如果把馬去掉,那就是一題標準的從左上角走到右下角得到最大值的方法 f i j max f i 1 j f i j 1 a i j 現在要取三次,可以看做有三個人同時從左上角走向右下角,取走路上的值 每個格仔只能取一次 所以說現在的狀態不能用f i j 來表示了 可以用f x1 y...

1277 方格取數

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

1907 方格取數 3

時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解檢視執行結果 問題描述 在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任 意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。程式設計任務 對於給定的方格棋...