codeforces 859C - Pie Rules (dp)
题目链接:https://codeforces.com/problemset/problem/859/C
对于当前拥有选择权的人,要么选择不拿当前的派,要么选择拿派并交换选择权,
那么当前的人所做出的决策,一定是根据后续状态的情况,选择当前收益最大的情况(博弈性)
令\(dp[i]\)表示当前拥有选择权的人的最大收益,从后向前转移
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<stack>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = 100;
int n;
int a[maxn],sum[maxn],dp[maxn];
ll read(){ ll s=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*f; }
int main(){
n = read();
for(int i=1;i<=n;++i){
a[i] = read(), sum[i] = sum[i-1] + a[i];
}
dp[n] = a[n];
for(int i=n-1;i>=1;--i){
dp[i] = max(dp[i+1],sum[n] - sum[i] - dp[i+1] + a[i]);
}
printf("%d %d\n",sum[n]-dp[1],dp[1]);
return 0;
}