NOIP2000 方格取數

2021-07-14 10:43:20 字數 926 閱讀 4941

時間限制: 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...