UVA 10891 Game of Sum(区间DP(记忆化搜索))
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1832
题目大意:
两个人在玩一个游戏:
给你一行n个数字,每次只能从左端或者右端取一个或多个数字。
每个人的分值就是他们各自取得的数字之和。
假设两人都足够聪明,问先手最多能比后手多多少分。
解题思路:
其实题目意思就是先手最多能得到多少分。
设dp[l][r]是取完[l,r]的数字时先手能获得的最大分值,sum是[l,r]的数字之和。
那么可以得到状态转移方程:
dp[l][r]=max(dp[l][r],sum-dp[i+1][r]),(l=<i<=r)
dp[l][r]=max(dp[l][r],sum-dp[l][i-1]),(l<=i<=r)
这里sum-子区间最优解的操作相当于取反,就是子区间的先手变成了后手,后手变成了先手的意思。
代码:
#include<cstdio>
#include<cmath>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<string>
#define lc(a) (a<<1)
#define rc(a) (a<<1|1)
#define MID(a,b) ((a+b)>>1)
#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define clr(arr,val) memset(arr,val,sizeof(arr))
#define _for(i,start,end) for(int i=start;i<=end;i++)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long LL;
const int N=1e3+;
const int INF=0x3f3f3f3f;
const double eps=1e-; int a[N],dp[N][N]; int solve(int l,int r){
if(l>r) return ;
if(dp[l][r]!=-INF)
return dp[l][r];
int sum=a[r]-a[l-];
//从左端取
for(int i=l;i<=r;i++){
dp[l][r]=max(dp[l][r],sum-solve(i+,r));
}
//从右端取
for(int i=r;i>=l;i--){
dp[l][r]=max(dp[l][r],sum-solve(l,i-));
}
return dp[l][r];
} int main(){
int n;
while(cin>>n&&n){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dp[i][j]=-INF;
}
}
for(int i=;i<=n;i++){
cin>>a[i];
dp[i][i]=a[i];
a[i]+=a[i-];
}
solve(,n);
cout<<*dp[][n]-a[n]<<endl;
}
return ;
}
UVA 10891 Game of Sum(区间DP(记忆化搜索))的更多相关文章
- uva 10891 区间dp+记忆化搜索
		
https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...
 - UVA 10003 Cutting Sticks 区间DP+记忆化搜索
		
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
 - (区间dp + 记忆化搜索)Treats for the Cows (POJ 3186)
		
http://poj.org/problem?id=3186 Description FJ has purchased N (1 <= N <= 2000) yummy treats ...
 - uva 10891 Game of Sum(区间dp)
		
题目连接:10891 - Game of Sum 题目大意:有n个数字排成一条直线,然后有两个小伙伴来玩游戏, 每个小伙伴每次可以从两端(左或右)中的任意一端取走一个或若干个数(获得价值为取走数之和) ...
 - UVA - 10891 Game of Sum 区间DP
		
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19461 Game of sum Description This ...
 - loj 1031(区间dp+记忆化搜索)
		
题目链接:http://lightoj.com/volume_showproblem.php?problem=1031 思路:dp[i][j]表示从区间i-j中能取得的最大值,然后就是枚举分割点了. ...
 - HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
		
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
 - hdu 4597 Play Game(区间dp,记忆化搜索)
		
Problem Description Alice and Bob are playing a game. There are two piles of cards. There are N card ...
 - BZOJ1055[HAOI2008]玩具取名  【区间dp + 记忆化搜索】
		
题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...
 - UVa 1252 Twenty Questions (状压DP+记忆化搜索)
		
题意:有n件物品,每件物品有m个特征,可以对特征进行询问,询问的结果是得知某个物体是否含有该特征,要把所有的物品区分出来(n个物品的特征都互不相同), 最小需要多少次询问? 析:我们假设心中想的那个物 ...
 
随机推荐
- 轻量高效的开源JavaScript插件和库 【转】
			
图片 布局 轮播图 弹出层 音频视频 编辑器 字符串 表单 存储 动画 时间 其它 加载器 构建工具 测试 包管理器 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果 ...
 - SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 E. 疯狂计数
			
1.改高精度 :float/double的精度为x位,小数部分最多x+x位(乘法和加法),整数部分<1000000*1000000/2=5 * 10^11 2.分成整数部分和小数部分分别存储,貌 ...
 - for循环 底层工作原理
			
for 循环是对容器进行迭代的过程. 什么是迭代? 迭代就是从某个容器对象中逐个地读取元素,直到容器中没有更多元素为止. for 循环的步骤是什么? 先判断对象是否为可迭代对象,不是的话直接报错,抛出 ...
 - Linux运维一:生产环境CentOS6.6系统的安装
			
CentOS 6.6 x86_64官方正式版系统(64位)下载地址 系统之家:http://www.xitongzhijia.net/linux/201412/33603.html 百度网盘:http ...
 - P3007 [USACO11JAN]大陆议会The Continental Cowngress
			
P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意: 给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 "支持或反对某法案&q ...
 - 2017 清北济南考前刷题Day 1 morning
			
期望得分:100+100+50=250 实际得分:100+60+50=210 T2 二分 估错上界.估错复杂度 T1 立方数(cubic) Time Limit:1000ms Memory Lim ...
 - typedef 与 #define的区别
			
typedef 与 #define的区别 整理于一篇经典blog,经典原文地址http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.ht ...
 - SharePoint 项目的死法(二)
			
说实话, 做SharePoint项目或者任何信息化项目并不是个容易的事情, 但成功的IT项目对于一个企业来说也许意味着很多, 从我的观察来看, 大部分的成功的信息化项目给企业所带来的回报都远远超过其所 ...
 - 11个实用的CSS学习工具[转载收藏]
			
1. 盒子模型的幻灯片 通过3D转换效果产生的互动的幻灯片.按向左或向右箭头键切换,全屏观看会有更好的效果. 2. CSS Diner 通过一个简单的小游戏让你学习CSS selector,输入正确的 ...
 - Linux系统接入小区宽带
			
jollywing(jollywing@foxmail.com) 安装 rp-pppoe 今天去联通营业厅开通了家庭宽带,回到家就搜索怎么用Linux接入小区宽带,发现大多数人都选择用PPPOE拨号上 ...