雙程動態規劃 nyoj61

2021-07-01 19:32:20 字數 915 閱讀 2855

題目大意:

在矩陣m*n中,從(1,1)點到(m,n)點,再從(m,n)點到(1,1)點,所走路線經過的同學最大好心值, 要求每個點只能走一遍。

分析:

①我們可以把它只看成兩個人同時從(1,1)點, 走到(m,n)點。

②因為只可以往兩個方向走所以無論什麼了路線,從(1,1)到(m,n)所走的步數一定相同。開四維陣列存狀態的話f[x1][y1][x2][y2]](表示當前乙個人走在(x1,y1)一人走在(x2,y2))那麼意思也就是x1+y1 = x2+y2。

③此題中開四維陣列太大,會超時。又知道同一時間所走的步數相同。那麼我們可以設乙個三維陣列f[i][x1][x2]: i代表第i步(或者i時刻),第乙個人在x1行,第二個人在x2行時,所經過的同學最大好心值。 細心地應該發現:一共走的步數已知,向下走的步數(也就是x1, x2)已知, 那麼向右走的步數也能知道啦 y1= i - x1; y2 = i - x2; 其實f[i][x1][x2]已經暗示了兩個人所在的位置(x1, i-x1),(x2, i-x2), 所代表的和四維陣列f[x1][y1][x2][y2]一樣。

額。。。說了這麼多,不知明白沒有。好了來**吧!

還要注意的是:我的陣列是從(1,1)開始的。 如果從(0,0)開始只要稍微改一下邊界就行。

#include

#include

#include

#include

using

namespace

std;

int t, m, n, a[100][100], f[150][100][100];

int max1(int a, int b, int c, int d)

void dp()}}

}int main()

return

0;}

nyoj 61 傳紙條(一) 動態規劃

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個m行n列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要...

nyoj 61 傳紙條(一)

分析 一道雙線程動態規劃題,與第六屆河南acm比賽的題類似.題意 小紙條從 1,1 傳到 m,n 再傳回來,並且路線不能交叉,使好感度之和最高.我們可以認為是同時找出兩條從 1,1 傳到 m,n 的不相交的路線.方法是 計算每一步情況下的情況,一條道路用i,j控制,另一條用x,y控制.從矩陣的角度看...

nyoj61 傳紙條(一) dp

思路 兩人乙個從左上角出發只能向右和向下,另一人從右下角出發只能向左和向上,可以看做兩人都是從右下角出發,且只能向左和向上傳紙條,並且兩條路徑不會相交,因為乙個人只會傳一次,那麼隨便畫乙個圖就能知道兩條路徑是閉合的圖形。因此我們可以定義dp x1,y1,x2,y2 是從 0,0 出發第一人到達 x1...