UPC 籃球運動(線性DP)

2021-10-23 00:09:26 字數 2249 閱讀 1401

時間限制: 1 sec 記憶體限制: 128 mb

[提交] [狀態]

題目描述

小明建造了乙個籃球場,他請來了2行n列的人,想讓他們進行比賽。每乙個人都有乙個能力值,第一行分別為h11,h12,…,h1n,第二行為h21,h22,…,h2n。現在小明可以選一些人組成乙個最強團隊。但是選人是有規則的,因為選乙個人會讓附近的人都很妒忌,所以他既不會同一行裡連續選擇2個人,也不會同一列裡的連續選擇2個人。

現在他希望所選團隊的能力值的之和最大,但人太多了,所以他想請聰明的你幫他解決這個問題。解決在滿足規則的情況下能力值的和最大為多少?

輸入

第一行輸入乙個整數n(1≤n≤105),表示每行中的學生人數。

第二行輸入n個整數h[1,1],h[1,2],…,h[1,n](1≤h[1,i]≤109),其中h[1,i]表示第一行中的第i個學生能力值。

第三行輸入n個整數h[2,1],h[2,2],…,h[2,n](1≤h[2,i]≤109),其中h[2,i]表示第二行中的第i個學生能力值。

輸出

輸出乙個整數,表示所選團隊中能力值之和最大。

樣例輸入 copy

【樣例1】

59 3 5 7 3

5 8 1 4 5

【樣例2】

31 2 9

10 1 1

【樣例3】17

4樣例輸出 copy

【樣例1】

29【樣例2】

19【樣例3】

7提示

樣例1說明:小明可以選擇以下團隊:9,8,7,5.

樣例2說明:小明可以選擇以下團隊

思路:

想到了dp但是比賽時用一維推了好久沒推出來

中午看到大佬部落格又想起了光光說過「dp推不出來可以先增加維數」

所以還是很好推的

dp[i][j]表示只從前i個中選且該列的狀態為j的最大值

j=0表示前一列中哪個都不選

j=1表示前一列中選第一行的,這一列只能選第二行的

j=2表示前一列中選第二行的,這一列只能選第一行的

狀態轉移方程如下:

dp[i][0

]=max(dp[i-1]

[1],dp[i-1]

[2])

; dp[i][1

]=max(dp[i-1]

[2],dp[i-1]

[0])

+a[1

][i]

; dp[i][2

]=max(dp[i-1]

[0],dp[i-1]

[1])

+a[2

][i]

;

**:

#include

using

namespace std;

typedef

long

long ll;

inline

void

read

(ll &x)

while

(ch >=

'0'&& ch <=

'9') s = s *

10+ ch -

'0', ch =

getchar()

; x = s*w;

}const

int maxn=

1e5+

150;

ll dp[maxn][3

];int n;

ll a[3]

[maxn]

;voidac(

) cout<<

max(dp[n][0

],max(dp[n][1

],dp[n][2

]));

}int

main()

ps:記得陣列不要越界

關於籃球 感

1 之前就想說說關於籃球的事情,趁現在時間大好,興致可以,那就來吧 從小學就開始打籃球,雖然不知道究竟是從幾年級開始的,但是現在一回想,還是挺溫暖的 記得那天是五年級的夏天午後,應該是午睡起來,急急忙忙跑到學校去,然後就和班裡幾個同學開始打 現在想來也是厲害,夏天午後啊,太陽那麼熱烈,我們打的滿頭大...

籃球之鬆緊

松 乃心平氣和,保持頭腦清醒,對身體,及場上防守站位,隊友位置,及投籃瞄準,皆有良好的感覺去處理好這些球,自我感覺,高的命中率,自然以,精準的瞄準,良好的肌肉協調性,及身體控制,足以體現出,松的重要性,緊 對於任何運動而言,緊無意是至關重要的一環,一如肌肉的鬆緊一樣,籃球運動中,緊的使用,是智慧型的...

黑子的籃球

主題曲 let s fly now let s try now let s fly now get my strength let s try now let s my strength let s fly now get my strength let s try now 攀上心靈雀躍的舞台 立於...