時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:5 描述
傳說hmh大沙漠中有乙個m*n迷宮,裡面藏有許多寶物。某天,dr.kong找到了迷宮的地圖,他發現迷宮內處處有寶物,最珍貴的寶物就藏在右下角,迷宮的進出口在左上角。當然,迷宮中的通路不是平坦的,到處都是陷阱。dr.kong決定讓他的機械人卡多去探險。
但機械人卡多從左上角走到右下角時,只會向下走或者向右走。從右下角往回走到左上角時,只會向上走或者向左走,而且卡多不走回頭路。(即:乙個點最多經過一次)。當然卡多順手也拿走沿路的每個寶物。
dr.kong希望他的機械人卡多盡量多地帶出寶物。請你編寫程式,幫助dr.kong計算一下,卡多最多能帶出多少寶物。
輸入第一行: k 表示有多少組測試資料。
接下來對每組測試資料:
第1行: m n
第2~m+1行: ai1 ai2 ……ain (i=1,…..,m)
【約束條件】
2≤k≤5 1≤m, n≤50 0≤aij≤100 (i=1,….,m; j=1,…,n)
所有資料都是整數。 資料之間有乙個空格。
輸出
對於每組測試資料,輸出一行:機械人卡多攜帶出最多價值的寶物數
樣例輸入
2
2 3
0 10 10
10 10 80
3 3
0 3 9
2 8 5
5 7 100
樣例輸出
120
134
之前做過類似的題,該題解法,雙線dp,可以想象成兩人同時從(1,1)點到(m,n)點尋寶,dp[k][i][j],k表示橫縱座標的和,(i,k-1)表示第乙個人位置,(j,k-j)表示第二個人的位置。 狀態轉移方程 dp[k][i][j]=max(dp[k-1][i][j],dp[k-1][i-1][j-1],dp[k][i-1][j],dp[k][i][j-1])+map[i][k-i]+map[j][k-j]
#include#includeint max(int a,int b)
int map[55][55],dp[110][55][55];
int main()
if(j-1>=1 && k-i-1>=1)
v=max(v,dp[k-1][i][j-1]);
dp[k][i][j]=v+map[i][k-i]+map[j][k-j];
}printf("%d\n",dp[m+n-1][m][m-1]+map[m][n]);
} return 0;
}
nyoj 712 探 尋 寶 藏
時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 傳說hmh大沙漠中有乙個m n迷宮,裡面藏有許多寶物。某天,dr.kong找到了迷宮的地圖,他發現迷宮內處處有寶物,最珍貴的寶物就藏在右下角,迷宮的進出口在左上角。當然,迷宮中的通路不是平坦的,到處都是陷阱。dr.kong決定讓...
nyoj 712探 尋 寶 藏
時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 傳說hmh大沙漠中有乙個m n迷宮,裡面藏有許多寶物。某天,dr.kong找到了迷宮的地圖,他發現迷宮內處處有寶物,最珍貴的寶物就藏在右下角,迷宮的進出口在左上角。當然,迷宮中的通路不是平坦的,到處都是陷阱。dr.kong決定讓...
南陽理工OJ 題目712 探 尋 寶 藏
雙線dp問題,在網上找了好幾個題解才把思路理清.d k i j 表示第k步,第一條線在i行,第二條線在j行時收集的寶藏 由於每次僅走一步,所以第一條線座標 i,k i 第二條線座標 j,k j 狀態轉移方程 d k i j max 在第k 1步時,由於是雙線,每條線均有兩種行走方式到達狀態 i,j ...