計蒜客蒜頭君的城堡之旅

2021-09-01 18:27:02 字數 1321 閱讀 8359

**

蒜國地域是乙個 n 行 m 列的矩陣,下標均從 1 開始。蒜國有個美麗的城堡,在座標 (n,m) 上,蒜頭君在座標 (1,1) 的位置上。蒜頭君打算出發去城堡遊玩,遊玩結束後返回到起點。在出發去城堡的路上,蒜頭君只會選擇往下或者往右走,而在返回的路上,蒜頭君只會選擇往上或者往左走,每次只能走一格。已知每個格仔上都有一定數量的蒜味可樂,每個格仔至多經過一次。

現在蒜頭君請你來幫他計算一下,如何計畫來回行程,可以收集到最多的蒜味可樂。

輸入格式

第一行輸入兩個整數 n,m(1≤n,m≤50),表示蒜國是乙個 n 行 m 列的矩陣。

接下來輸入 n 行,每行輸入 m 個整數,代表乙個 n×m 的矩陣,每個整數代表對應位置上的蒜味可樂數量,每行的每兩個整數之間用乙個空格隔開。其中蒜頭君的位置和城堡的位置上沒有蒜味可樂,用 0 表示,其餘位置上的整數範圍在 [1,100] 內。

輸出格式

輸出一行,輸出乙個整數,表示蒜頭君在來回路上能收集到的蒜味可樂的最大值。

這道題雖說是乙個人從起點走到終點,再從終點走回起點,要求兩次走的路不可以相交,但可以看作兩個人一起從起點走到終點,走的過程中不可以相遇,同時可以把兩者位置合併到乙個方程中,狀態轉移方程可表示為

dp[x1][y1][x2][y2]=max(max(dp[x1-1][y1][x2-1][y2],dp[x1][y1-1][x2][y2-1]),

max(dp[x1-1][y1][x2][y2-1],dp[x1][y1-1][x2-1][y2])) + num[x1][y1] + num[x2][y2];

1.可以假設為第乙個人走到位置為(x1,y1),第二個人走的位置為(x2,y2)。

2.兩者人不相遇即x1!=x2&&y1!=y2

3.看下面的**,你可能會不明白x1+y1!=x2+y2的具體含義,如果兩者是一起出發的話,那麼x1+y1會等於x2+y2

/*

dp[x1][y1][x2][y2]表示為(有兩個人一起從(1,1)出發,且兩人走的路不相交)第乙個人走到(x1,y1),第二個人走到(x2,y2)

時收集到的可樂總數,

*/#include

using namespace std;

intmain()

dp[1]

[1][

1][1

]=num[1]

[1];

//初始化狀態

for(

int x1=

1;x1<=n;x1++)}

}}cout<[m][n]

[m-1

]

//give me five

}

計蒜客 蒜頭君的城堡之旅(dp)

問題描述 蒜國地域是乙個 n 行 m 列的矩陣,下標均從 1 開始。蒜國有個美麗的城堡,在座標 n,m 上,蒜頭君在座標 1,1 的位置上。蒜頭君打算出發去城堡遊玩,遊玩結束後返回到起點。在出發去城堡的路上,蒜頭君只會選擇往下或者往右走,而在返回的路上,蒜頭君只會選擇往上或者往左走,每次只能走一格。...

蒜頭君面試 計蒜客

蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n nn 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數 n 1 n 100000 n 1 le n le 100000 n 1 n 1000 ...

計蒜客 蒜頭君倒水

問題描述 蒜頭君倒了 2 杯熱水在杯子裡面,第一杯裡面有 a 毫公升,第二杯裡面有 b 毫公升。水太熱了,蒜頭君決定通過輪流倒水的方式來讓水冷下來。每次倒水蒜頭君把第一杯的 x 的水倒入第二杯,把第二杯的 y 的水倒入第一杯 蒜頭君有奇特的方法,能讓這一過程是同是發生的,沒有先後之分 蒜頭君一直重複...