時間限制: 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 攀上心靈雀躍的舞台 立於...