Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)
Posted hollay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)相关的知识,希望对你有一定的参考价值。
题意:
输入n,给出两组均为 n个数字的数组a和b,轮流从a和b数组中取出一个数字,要求严格按照当前所选数字的数组下标比上一个所选数字的数组下标更大,计算能够取出的数字加起来的总和最大能为多少。
测试样例1:
输入:
5
9 3 5 7 3
5 8 1 4 5
输出:29
提示:选择下面划线标记的数字(9 8 5 4 3)
9 3 5 7 3
5 8 1 4 5
测试样例2:
输入:
3
1 2 9
10 1 1
输出:19
提示:(选择10 9)
1 2 9
10 1 1
题解:
简单的dp题,考虑选与不选两种状态,dp数组0为先取a的情况,1为先取b的情况。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n,a[100005],b[100005],dp[2][100005];
int main()
ios::sync_with_stdio(false);
while(!(cin>>n).eof())
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
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;
以上是关于Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)
Codeforces Round #436 E. Fire(背包dp+输出路径)
[ACM]Codeforces Round #534 (Div. 2)
CodeForces 574BBear and Three Musketeers