三方格取數
描述:設有n*n的方格圖,我們將其中的某些方格填入正整數,而其他的方格中放入0。
某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。在走過的路上,他取走了方格中的數。(取走後方格中數字變為0)此人從左上角到右下角共走3次,試找出3條路徑,使得取得的數總和最大。
第一行:n (4<=n<=20)
接下來乙個n*n的矩陣,矩陣中每個元素不超過80,不小於0
一行,表示最大的總和。
41 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條路徑,使得取得的...