题目描述 有n个数字排成一条直线,然后有两个小伙伴来玩游戏, 每个小伙伴每次可以从两端(左或右)中的任意一端取走一个或若干个数(获得价值为取走数之和), 但是他取走的方式一定要让他在游戏结束时价值尽量的高,最头疼的是两个小伙伴都很聪明,所以每一轮两人都将按照对自己最有利的方法去取数字,请你算一下在游 ...
分类:
其他好文 时间:
2018-08-27 18:43:33
阅读次数:
121
两个人只能从一个序列的左边起或者右边起连续取数,他的得分为这些数的和,让你求先手最多可以比后手多多少分。 状态的设计: 可以发现无论两个人怎么取,留给下一个人决策的序列一定是连续的,我们可以根据这个性质设状态。 设d[i][j]表示从i到j这些数中,先手能比后手得到的最大分数。(这里我们不规定A、B ...
分类:
其他好文 时间:
2017-10-31 11:01:54
阅读次数:
142
1.UVA10891 Game of Sum 2.LA4254 Processor 。 3.UVA10905 Children's Game 4.UVA11389 The Bus Driver Problem 5.LA4094 WonderTeam ...
分类:
其他好文 时间:
2017-09-30 00:31:26
阅读次数:
134
Uva10891: 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意的数。所有数都被取走后游戏结束, 然后统计每个人去走的所有数回合,作为格子的得分。两个人采取的策略都是让自己的得分尽量高,并且两个人足够聪明,求A的得分减去B的得分后的结果。 分析:乍一看 ...
分类:
其他好文 时间:
2016-07-24 12:08:09
阅读次数:
239
/*题意:n 个数 AB两个人轮流从左或右端取连续的数,每个人都按最优策略取,A先取,问最后A 比 B 多多少 。区间DP。 用f[i][j]表示区间 i-j 能取的数的总和是多少, 如果从左端取,f[i][i+k]=max(f[i][i+k], (sum[i+k]-sum[i-1])-f[i][j...
分类:
其他好文 时间:
2015-10-23 22:43:55
阅读次数:
206
这是一个零和博弈,最高得分只和序列以及谁先手有关。d[i][j],表示i到j的序列当前取的这个人的最高得分,转移以后状态是新的区间和另一个人取,从早取最小值。决策的最小值也可递推。#includeusing namespace std;const int MX = 101;int d[MX][MX]...
分类:
其他好文 时间:
2015-09-29 18:34:44
阅读次数:
148
// uva10891 Game of Sum
// 这是在训练指南上看到的一题,啃了很久很久,到现在有
// 一定的动态规划的基础,然而博弈性的东西依然不会
//
//
// 一开始想的是dp(i,j)表示在i,j段取得最大值
// dp(i,j) = max(dp(i,i),d(i.i+1),...d(i,j-1),d(j-1,j),d(j-2,j)...d(i+1)(j);,sum(i,j...
分类:
其他好文 时间:
2015-05-24 08:57:30
阅读次数:
158
好像带点博弈,又好像没有。 设dp[i][j] 为[i,j]区间内先手得分的最大值(这里的先手不一定是指player A!) 这时候只需要枚举出现在的先手会取哪几个,然后现在的最优状态就可以由以前的状态推出来 那么dp[i][j] = sum[i,j]-min(dp[i+1][j...
分类:
其他好文 时间:
2015-01-26 13:36:08
阅读次数:
183
题目:uva10891 - Game of Sum(递推)
题目大意:给出N个数,然后有两个小伙伴在玩游戏,每次可以从这一排数字的两侧中选择一侧开始取连续的数,必须取一个,也可以取完。这两个小伙伴都会采用最优的策略来取数,问第一个小伙伴取数的和与第2个小伙伴取数的和的差值。
解题思路:这题刚开始没什么头绪,只要碰到博弈思想的题目就没什么想法。看了别人的题解才明白。
...
分类:
其他好文 时间:
2014-08-06 23:08:12
阅读次数:
234