時間限制: 1 sec 記憶體限制: 64 mb
設有n*n的方格圖,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示(見樣例):
在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。
此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得取得的數之和為最大。
第1行:1個整數n(n<=10),表示n*n的方格圖,
第2..?行:每行有3個整數,前2個表示某個方格的位置,第3個數為該位置上所放的數。
一行單獨的0表示輸入結束。
第一行:1個整數,表示2條路徑上取得的最大的和。
67【解】1,初次審題時很容易想到的是之前做過的走一次取最大和的問題,但是需要注意的是,這裡跑兩次最大數的貪心演算法是錯誤的,因為在這乙個人走兩次取得數和是與兩次走的路徑有關的,第一次取數的路徑將會影響到第二次取數的路徑,所以這是乙個不能分開的考慮的問題。
2,不妨看做有兩個人同時從a出發前往b取數,兩個人所處的位置是互相影響的,有四個變數,分別為x1,y1,x2,y2,所以需要定義乙個四維狀態來表示兩個人的位置,f[x1][y1][x2][y2]表示兩人走到當前位置時能取數的最大總和。(答案將儲存在終點處)
3,在兩人行走過程中,不難發現只有4種行走情況,同右,同下,右下,下右。注意判斷當兩個人走到同一位置時,所取數不能重複相加。
//因為資料規模小,所以可以直接暴力
#include#includeint map[15][15],f[15][15][15][15];//兩個人取數字置狀態
int main()
printf("%d\n",f[n][n][n][n]);
}
//還可以用對角線優化成三維,不再記錄y1,y2,記錄步數,即對角線條數,依據x1,x2,計算答案。 NOIp2000 方格取數
設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的...
NOIP2000方格取數 DP
設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放 人數字0。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 ...
Noip 2000 方格取數 dp
題解 本題主要考查動態規劃。簡要題意 有n n n nn n的方格圖,在某些方格中填入正整數,1,1 1,1 1,1 到 n,n n,n n,n 共走兩次,找出2條這樣的路徑,走過的方格中將變為0,使得取得的數之和為最大 1.動態規劃 因為本題資料規模小,可直接四維dp求 如下 include in...