区间DP lightoj 1031
在此游戏中任意时刻的状态都是原始序列的一段子序列故:
定义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}
其中sum[i, j] 是元素i 到j 的和。这里的0是取完所有的数, 有了它方程就不需要显式的边界条件了。
答案是 d(1, n) - (sum[1, n] - d(1, n)) = 2*d(1, n) - sum[1, n]
先手 后手
记忆话一下就可以了
#include<stdio.h>
#include<string.h>
#include<algorithm> using namespace std;
#define MAXN 110
#define inf 100000000 int dp[MAXN][MAXN];
int z[MAXN];
int sum[MAXN];
bool vis[MAXN][MAXN]; int d(int a,int b)
{
if(vis[a][b])
return dp[a][b];
vis[a][b]=;
int m=;
int i;
for(i=a+;i<=b;i++)m=min(m,d(i,b));
for(i=a;i<=b;i++)m=min(m,d(a,i));
dp[a][b]=sum[b]-sum[a-]-m;
return dp[a][b];
}
int main()
{
int t,ca;
scanf("%d",&t);
ca=; while(t--)
{
int n,i;
scanf("%d",&n);
memset(vis,,sizeof(vis));
memset(dp,,sizeof(dp));
for(i=;i<=n;i++)
{
scanf("%d",&z[i]);
sum[i]=sum[i-]+z[i];
} printf("Case %d: %d\n",ca++,*d(,n)-sum[n]);
}
return ;
}
区间DP lightoj 1031的更多相关文章
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- 区间DP lightoj 1422
t个样例 n n个数字 从 1->n 穿衣服 脱了就不能再用 ,可以套 问最少几件衣服 #include<stdio.h> #include<string.h> # ...
- LightOJ 1422 Halloween Costumes 区间dp
题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表i-j天最少要带的衣服 从后向前dp 区间从大到小 更新d ...
- hdu 5693 && LightOj 1422 区间DP
hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...
- LightOj 1422 Halloween Costumes(区间DP)
B - Halloween Costumes Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...
- Lightoj 1025 - The Specials Menu (区间DP)
题目链接: Lightoj 1025 - The Specials Menu 题目描述: 给出一个字符串,可以任意删除位置的字符,也可以删除任意多个.问能组成多少个回文串? 解题思路: 自从开始学dp ...
- LightOJ 1422:Halloween Costumes(区间DP入门)
http://lightoj.com/volume_showproblem.php?problem=1422 题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉 ...
- lightoj 1283 - Shelving Books(记忆化搜索+区间dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1283 题解:这题很显然一看就像是区间dp,但是单纯的区间dp好像解决不了问题可 ...
- lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...
随机推荐
- 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
富文本编辑器,不多说了,这个大家应该都用到过,至于用到的什么版本,那就分很多种 CKEditor:很早以前叫FCK,那个时候也用过,现在改名了,比较流行的一个插件,国外很多公司在用 UEDITOR:百 ...
- [No000020]背单词提不起兴趣怎么办?
- 使用javascript实现html页面直接下载网盘文件
公司新建一网站,用的是商派的易开店系统.设计方案中有一个是下载文件的功能,但易开店不支持上传资源,所以无法下载本站资源. 于是想到了网盘资源下载,有些网站是把页面链接到网盘资源文件下载页面,进行二次跳 ...
- JS 中如何判断字符串类型的数字
function isNumberStr(str){ var n = Number(str); return !isNaN(n); } console.log(isNumberStr('37')); ...
- Linux下Mongodb安装和启动配置
1.下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz 下载完成后解压缩压缩包 tar zxf mongod ...
- js区分鼠标单双击 阻止事件冒泡
function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find(&qu ...
- selmodel
selmodel不仅可以设置checkbox,还可以设置单元格选中模式,列选择模式,行选择模式
- 【MVC版本】MVC3、MVC4之MODEL验证大比拼
1.密码验证 MVC3 [System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = &quo ...
- Padrino 生成器指南
英文版出处:http://www.padrinorb.com/guides/generators Padrino提供了用于快速创建应用的生成器,其优势在于构建推荐的Padrino应用结构.自动生成罗列 ...
- vertical-align 笔记
一些属性解释. 几个自己认为常用到的属性 baseline:默认 数值,px 百分比等是元素相对于基线偏移值,负数为向下偏移,正数为向上: text-top:把用vertical属性元素的顶端与父元素 ...