2018 8 21 2018暑假集訓之方格取數

2022-05-08 20:27:10 字數 1805 閱讀 8639

又是乙個比較老的題@_@

設有 n×n 的方格圖 (n≤9),我們將其中的某些方格中填入正整數,而其他的方格中則放入數字 0。如下圖所示(見樣例):

a0  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  0  0  0  0

0 14  0  0  0  0  0  0

0  0  0  0  0  0  0  0

b某人從圖的左上角的 a點出發,可以向下行走,也可以向右走,直到到達右下角的 b點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字 0)。

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

輸入格式:

輸入的第一行為乙個整數 n(表示 n×n 的方格圖),接下來的每行有三個整數,前兩個表示位置,第三個數為該位置上所放的數。一行單獨的 0 表示輸入結束。

輸出格式:

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

輸入樣例#1:

8

2 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

輸出樣例#1:

67
本題為noip2003 提高組第4題

看一下資料範圍顯然不可以dfs所以考慮用dp

本身是乙個基本的從上方、右側兩個點轉移的問題(dp[i][j]=max(dp[i-1][j],dp[i][j-1])+map[i][j])

然而現在有乙個問題就是如何解決兩個人的走法

本人最開始考慮走兩次

然而受dp性質的影響走完之後每個點都會變成0

現在有三種想法

比較快的spfa

網路流費用流

更高維度的dp

(為什麼能夠想到四維的dp??

受dp本身性質的影響dp各維度之間除轉移之外各個狀態是不會互相影響的

於是可以同時考慮兩條路線)

然而我是不會告訴你我前兩個都不會的

這樣我們就得到了轉移方程

dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k][l-1],dp[i][j-1][k-1][l]))+map[i][j]+map[k][l];

(當然要判斷i==k&&j==l的情況)

上**

#includeusing

namespace

std;

int n,x,y,val,ans=0,maxn,dp[12][12][12][12],map1[12][12];//

a[i][j][k][l]表示兩個人同時走,乙個走i,j 乙個走k,l

intmain()

for(int i=1;i<=n;i++)}}

}printf(

"%d\n

",dp[n][n][n][n]);

return0;

}

對於這個題是一道很典型的dp(把每個點當作揹包的物品)

大家可以用來學習dp的表示、轉移等

重點在於理解dp的並行性質

暑假集訓總結

華信暑假集訓總結 暑假乙個月的總結 第一 就是不夠細心,關於這一點,在前兩次的總結都有提到,但是自己這次還是沒有改正過來,說明自己確實是粗心,不過在以後的學習過程中還是要克服這個問題!第二 自己寫的 結構很亂,模擬較多時,經常都會找不到自己在 定義的,這個又是在 寫的。所以在接下來的過程中,自己還是...

暑假集訓總結

暑假集訓這就結束了,這個暑假算是上學以來最充實的乙個暑假了,乙個暑假除了休息的兩個周之外,都在好好的學習,雖然每天從早坐到晚,一直在電腦面前冥思苦想,一遍遍的問自己 我到底錯在哪了 但還是有好多的收穫,學習到了知識,提高了自己寫 的能力,鍛鍊了思考問題的能力,而且還提前體驗一把碼農的感覺,近乙個月的...

暑假集訓總結

三十五天的集訓生活,伴隨著我們最後一次的個人賽的結束而結束了。這乙個多月的三點一線的生活,讓我再次感受到,為自己目標奮鬥的滿足感!1,集訓,讓我收穫的不僅僅是學習新的知識,還教會了我做人做事的大道理。從剛開始的分組賽到個人賽再到組隊賽,整個暑假集訓經歷了二十幾場比賽,很感激自己能一直遵守比賽規則到最...