Codeforces-859C Pie Rules(dp)

传送门

 

Alice和Bob玩游戏,已知要从左到右依次分配n个数,规则是当前拥有令牌的人可以选择当前数字的归属,这一轮不获得数字的人将获得令牌。初始Bob拥有令牌,要求输出二者的最大收益。

 

解法的特色在于不是记录每一状态下Bob的获利,记录的是当前拥有令牌的人最大获利。逆推,最后dp[1]就是Bob的最大获益。

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #define MOD 1000000007
 5 #define INF 0x3f3f3f3f
 6 using namespace std;
 7 typedef long long LL;
 8 
 9 int n;
10 const int maxn = 51;
11 int add[maxn];
12 int sum;
13 int dp[maxn];
14 
15 int main() {
16     scanf("%d", &n);
17     for (int i = 1; i <= n; i++) {
18         scanf("%d", &add[i]);
19         sum += add[i];
20         add[i] += add[i - 1];
21     }
22     dp[n] = sum - add[n - 1];
23     for (int i = n; i >= 2; i--) {
24         dp[i - 1] = max(dp[i], sum - add[i - 2] - dp[i]);
25     }
26     printf("%d %d\n", sum - dp[1], dp[1]);
27     return 0;
28 }

 

posted @ 2018-01-29 17:26  xFANx  阅读(163)  评论(0编辑  收藏  举报