CodeForces-731E Funny Game(DP+Games)
来源:互联网 发布:淘宝日产手办 编辑:程序博客网 时间:2024/06/04 17:49
题意:
每个人每次从2..n选一个点,拿掉其前面所有的点然后进行加和,然后把加和放在剩余点的前面作为第一个点,加和并作为该玩家的分数,直至只剩下一个点游戏结束。最终玩家所有的分数加和,问在双方都选择最优策略的情况下(都尽量使自己减去对方的值最大),先手拿的减去后手拿的得分的最大值。
思路:
题意就是求先手值-后手值尽可能大,简单分析一下会发现先手和后手就是在这个序列的前缀和上进行操作的。而且先手后手都会选择其最优的策略,由于前缀和sum[n]是最终必选的,所以我们可以假设先手或后手取sum[n],然后从n-1倒着推,如果是先手选择当前点,那么就要承受后手在后面的最优,如果是后手选择当前点,那么就要承受先手在后面的最优。
dp[i][0]表示先手从第i点到第n点选择一个点使先手值-后手值最大。
dp[i][1]表示后手从第i点到第n点选择一个点使先手值-后手值最小。
dp[i][0] = max(dp[i+1][1]+sum[i], dp[i+1][0]);
dp[i][1] = min(dp[i+1][0]-sum[i], dp[i+1][1]);
(dp[n][0] = sum[n], dp[n][1] = -sum[n])
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 200005;int sum[maxn], dp[maxn][2];int x, n;int main(){ios::sync_with_stdio(0);cin >> n; sum[0] = 0;for(int i = 1; i <= n; ++i){cin >> x;sum[i] = sum[i-1]+x;}for(int i = 1; i <= n; ++i) dp[i][0] = -inf, dp[i][1] = inf;dp[n][0] = sum[n], dp[n][1] = -sum[n];for(int i = n-1; i >= 2; --i){dp[i][0] = max(dp[i+1][1]+sum[i], dp[i+1][0]);dp[i][1] = min(dp[i+1][0]-sum[i], dp[i+1][1]);}cout << dp[2][0] << endl;return 0;}
理解了上述思路之后,代码将变得更简洁:
#include <bits/stdc++.h>using namespace std;int n, p[200005];int main(){cin >> n;for(int i = 1; i <= n; ++i){cin >> p[i];p[i] += p[i-1];}int ans = p[n];for(int i = n-1; i >= 2; --i)ans = max(ans, p[i]-ans);cout << ans << endl;return 0;}
继续加油~
阅读全文
1 0
- CodeForces-731E Funny Game(DP+Games)
- 【Codeforces 731E】 Funny Game【dp】
- CodeForces 731 E.Funny Game(dp)
- 【CF 731E】Funny Game(DP)
- 【Codeforces Round #376 (Div. 2)】 Codeforces 731E Funny Game
- Codeforces Round #376 (Div. 2) E. Funny Game
- 动态规划(Funny Game,cf 731E)
- CodeForces 31E TV Game(dp)
- codeforces731E Funny Game(DP)
- codeforces-731E-dp
- codeforces 401E. Olympic Games
- Codeforces 31E TV Game 中途相遇法 状压dp
- codeforces 727E. Games on a CD
- Funny Funny Game
- Funny Funny Game(数学题)
- Funny Game
- codeforces 731E (优先队列 DP)
- 【dp】codeforces 83E
- SpringBoot 集成Swagger
- Electron打包发布
- 数据结构-二叉树、满二叉树、完全二叉树
- 最短路算法总讲
- Spring Boot Web 开发注解篇
- CodeForces-731E Funny Game(DP+Games)
- jQuery 生成 QR Code
- 买帽子 (hash)
- javaseday18(泛型 上下限 T 和?)
- Thinkphp 架构->URL模式
- Apache 2.4.6 多域名多网站配置
- visual studio 2010 下配置线性代数库Eigen
- React-入门
- Android基础_广播(八)