Codeforces 859C

859C - Pie Rules

思路:

dp

我们知道无论谁拿到decider token他拿不拿蛋糕都是确定的,都是使自己最优的结果。

于是

定义状态:dp[i]表示到第i个位置拿到decider token的人能使自己拿到的最大的值

初始状态:dp[n]=a[n]

目标状态:dp[1]

状态转移:dp[i]=max(dp[i+1],sum[i+1]-dp[i+1]+a[i])(sum[i]表示后缀和)

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

int a[55];
int dp[55];
int sum[55];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=n;i>=1;i--){
        sum[i]=sum[i+1]+a[i];
        dp[i]=max(sum[i+1]-dp[i+1]+a[i],dp[i+1]);
    }
    cout<<sum[1]-dp[1]<<' '<<dp[1]<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/widsom/p/8401310.html