【題目描述】
設有n*n的方格圖(n<=10),我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。 此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得取得的數之和為最大。
【題目鏈結】
【演算法】
醉了,一開始以為很簡單分成兩次唄,走完一遍第一次路徑經過的點記為0,但是感覺有點不對勁,因為第一次走過路可能會影響第二次,也就是有後效性,分開計算狀態空間中有很多種情況並沒有遍歷到。然後看書。。。。所以要多執行緒dp,設dp【a】【b】【c】【d】表示第一次走到【a】【b】點第二次走到【c】【d】點狀態下獲得的最大分數,狀態方程倒是不難。
【**】
1 #include 2using
namespace
std;
3int
n,i,j,tmp,a,b;
4int puz[20][20],dp[20][20][20][20];5
intmain()
618 printf("
%d\n
",dp[n][n][n][n]);
19return0;
20 }
OpenJudge P8786 方格取數 DP
總時間限制 1000ms 記憶體限制 65536kb 描述 設有n n的方格圖 n 10 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格...
OpenJudge 8786 方格取數 dp入門)
位址 描述設有n n的方格圖 n 10 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 p 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試...
DP ssl 1010 方格取數(多執行緒DP)
設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的...