vijosP1143三取方格 多執行緒dp

2021-07-11 13:33:48 字數 1032 閱讀 7017

三方格取數

描述:設有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

思路:如果按常規的把所有的方案都記錄下來,那一定會超記憶體。當步數和三個橫座標確定下來以後,那位置一定就固定下來了,這樣只需要四維就夠了。建議先把乙個人和兩個人從左上角到右下角這兩題做一下。拿記憶化搜尋做比較簡單點。

**寫的有點挫,,,

詳細見**:

#include#include#include#includeusing namespace std;

const int maxn=1e5+100;

const int mod=1e9+7;

typedef long long ll;

typedef unsigned long long llu;

int dp[50][22][22][22];

int a[30][30];

int dx[2]=;

int dy[2]=;

void work(int a,int b,int c,int d,int n)

}} }

printf("%d\n",dp[2*n-2][n][n][n]);

return 0;

}

解題報告 Vijos1143 三取方格數

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

VIJOS 1143 三方格取數

jerryzhou同學經常改編習題給自己做。這天,他又改編了一題。設有n n的方格圖,我們將其中的某些方格填入正整數,而其他的方格中放入0。某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。在走過的路上,他取走了方格中的數。取走後方格中數字變為0 此人從左上角到右下角共走3次,試找出3...

三取方格數

時間限制 1 sec 記憶體限制 128 mb 設有n n的方格圖,我們將其中的某些方格填入正整數,而其他的方格中放入0。某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。在走過的路上,他取走了方格中的數。取走後方格中數字變為0 此人從左上角到右下角共走3次,試找出3條路徑,使得取得的...