题目链接

什么都不想说,最近状态暴跌。。

 #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的更多相关文章

  1. hdu 4597 Play Game(记忆化搜索)

    题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...

  2. 博弈dp入门 POJ - 1678 HDU - 4597

    本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...

  3. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

  4. hdu 4597 Play Game 区间dp

    Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...

  5. HDU 4597 Play Game(区间DP(记忆化搜索))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...

  6. Hdu 4597记忆化搜索

    好久没有做题了,水平已经完全在学弟之下了. 一个吉林邀请赛最水的题目.:( 其实这题一看到数据范围,只可以想到思路,直接爆搜,加个记忆化. 这题虽然A了,但是我还是没太想清楚一些边界情况,心虚着A了. ...

  7. HDU 4597 记忆化搜索

    ² 博弈取牌—记忆化搜索 题目描述: 有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高.问A先取,他能 ...

  8. HDU 4597 Play Game 记忆化DP

    Play Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Proble ...

  9. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

随机推荐

  1. VS2010 自动跳过代码现象

    今日,发现在Release的调试模式下,VS2010会“莫名其妙”的跳过一些代码不执行. 经实验,初步判断可能的原因:预处理器指令或编译器/连接器优化. 20150703更新: 部分代码: m_pTa ...

  2. 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端

    这应该是继我研究手册QQ协议后的第2个稍微正式一点的网络程序, 不只是Scoket套接字编程, 还涉及到更多的HTTP协议知识! 阿里云开放储存服务OSS官方已经提供了不少SDK, 包括PHP/Pyt ...

  3. git branch用法总结

    git branch      git branch 不带参数:列出本地已经存在的分支,并且在当前分支的前面加“*”号标记,例如:   #git branch* master   newbranch ...

  4. iOS 随记

    UIImage 走缓存 + (UIImage *)imageNamed:(NSString *)name; 不走缓存 + (UIImage *)imageWithContentsOfFile:(NSS ...

  5. PAT A 1016. Phone Bills (25)【模拟】

    题目:https://www.patest.cn/contests/pat-a-practise/1016 思路:用结构体存储,按照名字和日期排序,然后先判断是否有效,然后输出,时间加减直接暴力即可 ...

  6. @property中strong跟weak的区别

    strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomic, strong) NSString *string1; @property ...

  7. python web编程-web客户端编程

    web应用也遵循客户服务器架构 浏览器就是一个基本的web客户端,她实现两个基本功能,一个是从web服务器下载文件,另一个是渲染文件 同浏览器具有类似功能以实现简单的web客户端的模块式urllib以 ...

  8. Uva 11059 Maximum Product

    注意long long  long long  longlong !!!!!!   还有 printf的时候 明明longlong型的答案 用了%d  WA了也看不出,这个细节要注意!!! #incl ...

  9. Codeforces Round #355 (Div. 2)-B

    B. Vanya and Food Processor 题目链接:http://codeforces.com/contest/677/problem/B Vanya smashes potato in ...

  10. ajax轮循

    使用 AJAX 进行异步加载轮询操作.简单代码如下: <script> // 执行ajax轮循操作 function polling(){ var xmlhttp; // 判断浏览器--创 ...