hihocoder A Game 区间dp
2017-10-29 15:40
253 查看
题意
一个数串A和B每人从这个数串的第一个或者最后一个元素选择一个数加到自己的得分里,A先选,求先手最大得分
样例:
4
-1 0 100 2
输出
99
分析
对于任意一个区间段 我们考虑的问题是相似的不论任何区间段都是考虑取前面的还是取后面的
我们要从两种策略里选出一个更优的
对这个序列 我们每次都是从左或是从右选择一个元素拿出来
所以问题就相当于在从i到j的区间段里
如何表示两种策略那就是拿前面的和拿后面的计算结果
我们就把这个结果存到一个二维数组中
假设我们问题n==1
那么直接就能返回结果 得到最大先手
假设问题规模为2
那么就相当于选择左边的元素 那么对方的得分就是f(i+1,e)
先手得分就是sum[e]-sum[i-1]-f(i+1,e)
右边同理 我们选取两个中的那个最大的结果
当区间长度覆盖了全部区间段时就是我们要的结果
#include<bits/stdc++.h> using namespace std; int a[1010],f[1010][1010],sum[1010]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); f[i][i]=a[i]; sum[i]=sum[i-1]+a[i]; } /*f[i][j]表示从i开始到j先手所能获取的最大值 */ for(int i=2;i<=n;i++){ for(int j=1;j<=n-i+1;j++){ int e = j+i-1; f[j][e] = max(sum[e]-sum[j-1]-f[j+1][e],sum[e]-sum[j-1]-f[j][e-1]); } } printf("%d\n",f[1] ); return 0; }
相关文章推荐
- hdu 5693 D Game(区间DP)
- UVA 10891 Game of Sum(区间DP)
- HihoCOder1323 : 回文字符串(区间DP)
- hihocoder-1285 智力竞赛(区间dp)
- Codeforces 327A Flipping Game(区间DP,暴力枚举)
- 【Hihocoder1636】Pangu and Stones(区间DP)
- HDU 5693 D Game 区间dp
- UVA 10891 Game of Sum(区间DP)
- HihoCoder - 1636 Pangu and Stones——区间dp
- UVA 10891 Game of Sum(区间博弈dp)***
- hihocoder 1110 正则表达式 (区间dp)
- hihocoder 1149 : 回文字符序列(区间dp)
- Hdu 5693 D Game【区间Dp】好题!
- uva10891 Game of Sum 博弈区间dp
- UVA 10891 Game of Sum(区间DP)
- uva 10891 - Game of Sum(博弈,区间dp)
- UVA 10891 Game of Sum (区间DP)
- UVA 10891 Game of Sum(经典区间dp)
- poj 1738 An old Stone Game(区间dp 合并石子问题直线型)
- UVA 10891 Game of Sum(区间DP)