NOIP2000提高組第四題 方格取數 DP

2021-10-05 08:44:41 字數 1262 閱讀 2641

題目描述

設有 n×n 的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。

某人從圖中的左上角 a 出發,可以向下行走,也可以向右行走,直到到達右下角的 b 點。

在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。

此人從 a 點到 b 點共走了兩次,試找出兩條這樣的路徑,使得取得的數字和為最大。

輸入格式

第一行為乙個整數n,表示 n×n 的方格圖。

接下來的每行有三個整數,第乙個為行號數,第二個為列號數,第三個為在該行、該列上所放的數。

一行「0 0 0」表示結束。

輸出格式

輸出乙個整數,表示兩條路徑上取得的最大的和。

資料範圍

n≤10

輸入樣例:

82 3 13

2 6 6

3 5 7

4 4 14

5 2 21

5 6 4

6 3 15

7 2 14

0 0 0

輸出樣例:

67思路

由於要走兩次, 所以可以用 f[i1, j1, i2, j2] 來存此時在(i1, j1) 和 (i2, j2)的最大的值

這裡對這個進行優化, 用 k代表i+j=k時的狀態, f[k, i1, i2]就可以存下上面描述的狀態, 然後對這個狀態的前一步的4個狀態去最大值就可以得到當前狀太的最大值

**

#include

#include

#include

#include

using

namespace std;

const

int n =15;

int g[n]

[n], f[

2* n]

[n][n]

;int n, m;

intmain()

} cout << f[

2* n]

[n][n]

<< endl;

return0;

}

NOIP2000提高組 單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...

NOIP2000 提高組 複賽 進製轉換

noip2000 提高組 複賽 進製轉換 1.該題難在弄懂樣例,負進製,餘數為 0 2.試了一下,程式自帶的 發現對負進製轉換無用,得自個寫一套。3.弄懂了 15轉 2進製,餘數 0,商正負都可以。模擬如下 15除 2 8餘1 8除 2 4餘0 4除 2 2餘0 2除 2 1餘0 1除 2 1餘1 ...

NOIP 2000 提高組 複賽 單詞接龍

noip 2000 提高組 複賽 單詞接龍 1.程式編寫過程中,發現接龍處的判斷編寫有誤,馬上著手修改。2.樣例通過,提交40分,錯了測試點1 4.輸入 1envelopee 輸出 154.上述測試點是挺經典的,不容易考慮到。envelope envelope 拼接成envelopenvelope ...