uva 10891 区间dp+记忆化搜索
https://vjudge.net/problem/UVA-10891
给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手,求最后A-B的得分。
令 f(i,j)表示对于[i,j]对应的序列,先手可以从中获得的最大得分,那么答案可以写为 f(i,j)-(sum(i,j)-f(i,j)),也就是 2*f(i,j)-sum(i,j)
下面讨论f(i,j)的写法,显然递归的形式更好表达一些,为了防止重复的计算使用记忆化搜索。
当(i==j)时显然返回a[i]即可;
否则,我们可以枚举出所有先手可能拿走的数的区间,得出一个最大值就是返回值。
方程就是 f(i,j)=MAX{sum(i,k)+sum(K+1,j)-f(k+1,j) , sum(k,j)+sum(i,k-1)-f(i,k-1) | i<=k<=j}; //[i,k]和[k,j]是先手可能取得区间
还有一个转移方程是 f(i,j)=sum(i,j)-MIN(f(k1,k2)) | [k1,k2]是先手可能取得区间对应的补集。
#include<bits/stdc++.h>
using namespace std;
int pre[],a[];
int ans[][],vis[][];
int sum(int i,int j)
{
if(i>j) return ;
return pre[j]-pre[i-];
}
int f(int l,int r)
{
if(l>r) return ;
if(vis[l][r]) return ans[l][r];
vis[l][r]=;
if(l==r) return ans[l][r]=a[l];
int ret=-;
for(int k=l;k<=r;++k)
{
ret=max(ret,max(sum(l,k)+sum(k+,r)-f(k+,r),sum(k,r)+sum(l,k-)-f(l,k-)));
}
return ans[l][r]=ret;
}
int main()
{
int N,m,i,j,k;
while(cin>>N&&N){
memset(vis,,sizeof(vis));
for(i=;i<=N;++i)
{
cin>>a[i];
pre[i]=pre[i-]+a[i];
}
cout<<*f(,N)-pre[N]<<endl;
}
return ;
}
uva 10891 区间dp+记忆化搜索的更多相关文章
- 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 ... 
- loj 1031(区间dp+记忆化搜索)
		题目链接:http://lightoj.com/volume_showproblem.php?problem=1031 思路:dp[i][j]表示从区间i-j中能取得的最大值,然后就是枚举分割点了. ... 
- BZOJ1055[HAOI2008]玩具取名  【区间dp + 记忆化搜索】
		题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ... 
- 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 ... 
- poj 1088 滑雪(区间dp+记忆化搜索)
		题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ... 
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
		题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ... 
- 洛谷1880 区间dp+记忆化搜索 合并石子
		题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ... 
随机推荐
- python基础之类的isinstance与issubclass、反射
			一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass o ... 
- jsp页面上读取MySQL数据库datetime时间显示问题
			mysql数据库中时间字段选用了datetime,如果通过java实现在jsp页面上显示时间为"年-月-日 时:分"等格式,那么如下代码就会有不同的结果! 实体类中两个变量: p ... 
- Go语言版本的helloworld
			新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ... 
- 前端基础-css(2)
			一.标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web网页的制作,是个“流”,从上而下,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画. 标准文档流下,有一些现象,比 ... 
- hdu 1251 统计难题(字典树)
			统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ... 
- rabbitmq channel参数详解【转】
			1.Channel 1.1 channel.exchangeDeclare(): type:有direct.fanout.topic三种durable:true.false true:服务器重启会保留 ... 
- python学习之路-第六天-一个简单的脚本
			现在有一个需求:把某个目录下的文件备份到指定到另外一个目录下,而且压缩后文件为zip文件 # -*- coding:utf-8 -*- #! /usr/bin/python # Filename:ba ... 
- 吴超老师课程--HBASE的集群安装
			1.hbase的机群搭建过程(在原来的hadoop上的hbase伪分布基础上进行搭建)1.1 集群结构,主节点(hmaster)是hadoop,从节点(region server)是hadoop1和h ... 
- 08 Spring框架 AOP (一)
			首先我们先来介绍一下AOP: AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的 ... 
- 如何优雅地使用 Stack Overflow
			链接:https://www.zhihu.com/question/20824615/answer/69560657 来源:转载 一,提问前一定要搜索,先在 Google 搜索,然后在 StackOv ... 
