Uva 10891 经典博弈区间DP
经典博弈区间DP
题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf
题意:
给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取。
并且A B都尽力使自己选择的结果为最大的,可以理解成A B每一步走的都是最优的。
如果A先选择,则A B差值最大是多少。
分析:
总和是一定的,所以一个得分越高,另一个人的得分越低。当前状态总是最开始的状态的一个子状态。
d(i,j): 先手取 i ~ j 最优策略下,得分最大值。
d(i,j) = sum(i,j) - min(d(i+1,j),d(i+2,j),...,d(j,j), d(i,j-1),d(i,j-2),...,d(i,i),0)
0表示全部取完;
答案就是 d(1,n) - ( sum(1,n) - d(1,n) );
tip: sum(i,j) 可以在 O(1) 的时间内求出来。 S[i] 是 1~ i 的和,那么 sum(i,j) = S[j] - S[i-1];
#include <bits/stdc++.h> using namespace std; int n;
const int maxn = + ; int S[maxn],A[maxn],d[maxn][maxn],vis[maxn][maxn]; int dp(int i,int j) {
if(vis[i][j])
return d[i][j];
vis[i][j] = ; int m = ;
for(int k=i+;k<=j;k++)
m = min(m,dp(k,j));
for(int k=i;k<j;k++)
m = min(m,dp(i,k)); d[i][j] = S[j] - S[i-] - m;
return d[i][j]; } int main()
{
while(scanf("%d",&n)==&&n) {
S[] = ;
for(int i=;i<=n;i++) {
scanf("%d",&A[i]);
S[i] = S[i-] + A[i];
}
memset(vis,,sizeof(vis));
printf("%d\n",*dp(,n)-S[n]);
}
return ;
}
Uva 10891 经典博弈区间DP的更多相关文章
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- uva 10003 Cutting Sticks(区间DP)
题目连接:10003 - Cutting Sticks 题目大意:给出一个长l的木棍, 再给出n个要求切割的点,每次切割的代价是当前木棍的长度, 现在要求输出最小代价. 解题思路:区间DP, 每次查找 ...
- UVa 1632 阿里巴巴(区间DP)
https://vjudge.net/problem/UVA-1632 题意: 直线上有n个点,其中第i个点的坐标是xi,且它会在di秒之后消失.Alibaba可以从任意位置出发,求访问完所有点的最短 ...
- UVA - 1331 Minimax Triangulation (区间dp)(最优三角剖分)
题目链接 把一个多边形剖分成若干个三角形,使得其中最大的三角形面积最小. 比较经典的一道dp问题 设dp[l][r]为把多边形[l,r]剖分成三角形的最大三角形面积中的最小值,则$dp[l][r]=m ...
- uva 10739【基础(区间)dp】
Uva 10739 题意:给定字符串,可以增加.删除.修改任意字符,问最少经过多少次操作使字符串回文. 题解:定义dp[l][r]表示把从l到r的子串Sl...Sr变成回文串需要操作的最少次数.字符可 ...
- uva10891 Game of Sum(博弈+区间dp+优化)
题目:点击打开链接 题意:两个人做游戏,共有n个数,每个人可以任选一端取任意多连续的数,问两个人都想拿最多的情况下,先手最多比后手多拿多少分数. 思路:这题一开始想到的是用dp[i][j]表示区间[i ...
- hdu 4579 博弈+区间dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 #include <cstdio> #include <cstring> ...
- UVA 1626 Brackets sequence 区间DP
题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可.注意:输入可能是空串. 思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min( ...
- UVA 10617 Again Palindrome 区间DP
题目链接: https://cn.vjudge.net/problem/UVA-10617 题目大意: 问有几种删除字符的方法可以使得该字符串为回文. 解题思路: 删除字符得到回文串的方法数 等于 字 ...
随机推荐
- php数据优化
Array ( [0] => Array ( [id] => 19 [receive_id] => 41 [mac] => a4:3d:78:fc:49:50 [staytim ...
- maven配置
java 环境变理 http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html maven环境变理 http://www.cnblog ...
- orange pi pc 体验(一)
最近在淘宝上看到一款和树莓派差不多的卡片机,定价才99元,而且是国产的,忍不住入手了一个,就是orange pi 感兴趣的可以百度搜索下,深圳一个公司出的,不过资料比树莓派少了很多,论坛中人也没多少, ...
- 我的MySQL整理
MySql unique的实现原理简析 MYSQL操作 MySql数据类型(转) MySql数据类型 MySql和CSV MySql超新手入门(很好的Mysql学习教材) MySql加锁处理分析 My ...
- kafka windows环境搭建 测试
http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html 照着例子搭建成功
- 与MySQL传统复制相比,GTID有哪些独特的复制姿势?
与MySQL传统复制相比,GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军,苏宁云商IT总部资深技术经理,从事数 ...
- 【皇甫】☀IOC和AOP的拓展实例
<!--构造器注入 --> <bean id="user1" class="cn.happy.entity.User"> <con ...
- 论AVL树与红黑树
首先讲解一下AVL树: 例如,我们要输入这样一串数字,10,9,8,7,15,20这样一串数字来建立AVL树 1,首先输入10,得到一个根结点10 2,然后输入9, 得到10这个根结点一个左孩子结点9 ...
- table 边框显示
.td{border:solid #add9c0; border-width:0px 1px 1px 0px;}.table{border:solid #add9c0; border-width:1p ...
- XE5 修复 安卓 输入法隐藏 后 无法退出的问题 3.2
欢迎到 ① FireMonkey[DELPHI XE5] 165232328 交流开发技术. (************************************************** ...