题目大意:从两队中依次选择球员,不可连续选择一队,也可不选,使最终选择的队员总身高最大。
题解:对于每一个下标,有三种操作:选一号队员,选二号队员,不选。
动态规划吖!
dp[i][j]: j = 0,第i号不选的最大值;
j = 1,第i号选择一号队员的最大值;
j = 2,第i号选择二号队员的最大值。
直接开始冻钛龟画
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
long long dp[N][3];
int n;
long long a[N], b[N];
int main(){
cin>>n;
for(int i = 1; i <= n; ++i){
cin>>a[i];
}
for(int i = 1; i <= n; ++i){
cin>>b[i];
}
dp[1][1] = a[1];
dp[1][2] = b[1];
for(int i = 2; i <= n; ++i){
dp[i][1] = max(dp[i-1][0], dp[i-1][2])+a[i];
dp[i][2] = max(dp[i-1][0], dp[i-1][1])+b[i];
dp[i][0] = max(dp[i-1][1], dp[i-1][2]);
}
cout<<max(dp[n][0], max(dp[n][1], dp[n][2]))<<endl;
}