题意:输入n,给出两组均为 n个数字的数组a和b,轮流从a和b数组中取出一个数字,要求严格按照当前所选数字的数组下标比上一个所选数字的数组下标更大,计算能够取出的数字加起来的总和最大能为多少。
dp题一直没做, 现在准备搞搞。
这是一个简单dp :考虑选与不选两种状态,dp数组0为先取a的情况,1为先取b的情况
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 7;
LL a[N], b[N], dp[2][N];
int main()
{
int n;
std::cin >> n;
for (int i = 1; i <= n; i ++ ) std::cin >> a[i];
for (int i = 1; i <= n; i ++ ) std::cin >> b[i];
for (int i = 1; i <= n; i ++ )
{
dp[1][i] = max(dp[0][i-1] + b[i], dp[1][i-1]);
dp[0][i] = max(dp[1][i-1] + a[i], dp[0][i-1]);
}
cout << max(dp[1][n], dp[0][n]) << endl;
return 0;
}