HDU 4597 Play Game
什么都不想说,最近状态暴跌。。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int p[][];
int sum[][];
int dp1[][],dp2[][];
int dp[][][][];
int dfs1(int x1,int y1)
{
if(dp1[x1][y1])
return dp1[x1][y1];
if(x1 == y1)
return dp1[x1][y1] = p[][x1];
return dp1[x1][y1] = max(sum[][y1]-sum[][x1]-dfs1(x1+,y1)+p[][x1],sum[][y1-]-sum[][x1-]-dfs1(x1,y1-)+p[][y1]);
}
int dfs2(int x1,int y1)
{
if(dp2[x1][y1])
return dp2[x1][y1];
if(x1 == y1)
return dp2[x1][y1] = p[][x1];
return dp2[x1][y1] = max(sum[][y1]-sum[][x1]-dfs2(x1+,y1)+p[][x1],sum[][y1-]-sum[][x1-]-dfs2(x1,y1-)+p[][y1]);
}
int dfs(int x1,int y1,int x2,int y2)
{
int maxz = ;
if(dp[x1][y1][x2][y2])
return dp[x1][y1][x2][y2];
if(x1 == y1&&x2 == y2)
return dp[x1][y1][x2][y2] = max(p[][x1],p[][x2]);
else if(x1 == y1)
{
maxz = sum[][y2]- sum[][x2-]-dfs2(x2,y2)+p[][x1];
maxz = max(maxz,sum[][y1]-sum[][x1-]+sum[][y2]-sum[][x2]-dfs(x1,y1,x2+,y2)+p[][x2]);
maxz = max(maxz,sum[][y1]-sum[][x1-]+sum[][y2-]-sum[][x2-]-dfs(x1,y1,x2,y2-)+p[][y2]);
}
else if(x2 == y2)
{
maxz = sum[][y1] - sum[][x1-] - dfs1(x1,y1) + p[][x2];
maxz = max(maxz,sum[][y1]-sum[][x1]+sum[][y2]-sum[][x2-]-dfs(x1+,y1,x2,y2)+p[][x1]);
maxz = max(maxz,sum[][y1-]-sum[][x1-]+sum[][y2]-sum[][x2-]-dfs(x1,y1-,x2,y2)+p[][y1]);
}
else
{
maxz = max(maxz,sum[][y1]-sum[][x1]+sum[][y2]-sum[][x2-]-dfs(x1+,y1,x2,y2)+p[][x1]);
maxz = max(maxz,sum[][y1-]-sum[][x1-]+sum[][y2]-sum[][x2-]-dfs(x1,y1-,x2,y2)+p[][y1]);
maxz = max(maxz,sum[][y1]-sum[][x1-]+sum[][y2]-sum[][x2]-dfs(x1,y1,x2+,y2)+p[][x2]);
maxz = max(maxz,sum[][y1]-sum[][x1-]+sum[][y2-]-sum[][x2-]-dfs(x1,y1,x2,y2-)+p[][y2]);
}
return dp[x1][y1][x2][y2] = maxz;
}
int main()
{
int t,n,i,j;
scanf("%d",&t);
while(t--)
{
memset(dp,,sizeof(dp));
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
memset(sum,,sizeof(sum));
scanf("%d",&n);
for(i = ; i <= ; i ++)
{
for(j = ; j <= n; j ++)
{
scanf("%d",&p[i][j]);
sum[i][j] = sum[i][j-] + p[i][j];
}
}
printf("%d\n",dfs(,n,,n));
}
return ;
}
HDU 4597 Play Game的更多相关文章
- hdu 4597 Play Game(记忆化搜索)
题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...
- 博弈dp入门 POJ - 1678 HDU - 4597
本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...
- hdu 4597 + uva 10891(一类区间dp)
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...
- hdu 4597 Play Game 区间dp
Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...
- HDU 4597 Play Game(区间DP(记忆化搜索))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...
- Hdu 4597记忆化搜索
好久没有做题了,水平已经完全在学弟之下了. 一个吉林邀请赛最水的题目.:( 其实这题一看到数据范围,只可以想到思路,直接爆搜,加个记忆化. 这题虽然A了,但是我还是没太想清楚一些边界情况,心虚着A了. ...
- HDU 4597 记忆化搜索
² 博弈取牌—记忆化搜索 题目描述: 有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高.问A先取,他能 ...
- HDU 4597 Play Game 记忆化DP
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Proble ...
- HDU 4597 Play Game(记忆化搜索,深搜)
题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...
随机推荐
- SQLAlchemy Core插入数据,有好几种方法呢
看是一次插入一条还是多条, 看是数据表名是变量还是常量, 操作还是很灵活的, 主要看哪种顺手顺眼啦. #coding=utf-8 from datetime import datetime from ...
- DB2 日期相减
简单方法: 使用 days 字符型的日期:2012-01-01,2012-01-11 values days(date('2012-01-11')) - days(date('2012-01-01' ...
- android 相对布局里面的一些属性
一. 有关于RelativeLayout布局的一些属性 1. 相对于兄弟控件的位置:android:layout_below Android:layout_toLeftof Android:la ...
- android 入门-使用adb安装及卸载apk
我想用adb 安装apk 到设备上现在出现了2个. 提示我没有找到设备 安装不用进去adb shell 这是你存放apk文件夹路径 下面安装apk到手机上(usb一定要连接成功否则读取不到手机 ...
- AxureRP7.0各类交互效果汇总帖(转)
了便于大家参考,我把这段时间发布分享的所有关于AxureRP7.0的原型做了整理. 以下资源均有对应的RP源文件可以下载. 当然 ,其中有部分是需要通过完成解密游戏[攻略]才能得到下载地址或者下载密码 ...
- Android入门开发之SD卡读写操作(转)
SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String sdCardRoot = Environment.getE ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees DP
C. Coloring Trees ZS the Coder and Chris the Baboon has arrived at Udayland! They walked in the pa ...
- Ubuntu14 搭载vim环境查看源码
首先是下载完整的vim74,然后编译安装.遗憾的是当编译时,没有开启图形界面. 在安装新版本的Vim之前,你需要卸载原来安装的老版本Vim,依次在终端下执行下列命令: sudo apt-get rem ...
- spring配置的相关文章
1.maven项目中自动下载jar包的pom.xml配置 http://blog.sina.com.cn/s/blog_643634b80101hd3i.html 2.参考配置1:http://www ...
- ThinkPHP3.2 volist嵌套循环显示原理
php页面:$fatherList = $Document->where('pid=1')->select(); foreach($fatherList as $n=> ...