2013 吉林通化邀请赛 Play Game 记忆化搜索
dp[ba][ta][bb][tb]表示a堆牌从下面拿了ba张,从上面拿了ta张。b堆牌从下面拿了bb张,从上面拿了tb张。当前玩家能得到的最大的分数。
扩展方式有4种,ba+1,ta+1,bb+1,tb+1,用当前剩下牌的总分减掉它,取最大值,就是当前玩家的最高分。
记忆化搜索
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int a[30];
int b[30];
int sum;
int dp[21][21][21][21],n,maxn;
inline int cal_max(int a,int b,int c)
{
return max(max(a,b),c);
}
int dfs(int ba,int ta,int bb,int tb,int sums)
{
if(ba+ta==n&&bb+tb==n) return 0;
if(dp[ba][ta][bb][tb]) return dp[ba][ta][bb][tb];
int maxn=0;
if(ba+ta<n)
{
maxn=cal_max(maxn,sums-dfs(ba+1,ta,bb,tb,sums-a[ba+1]),sums-dfs(ba,ta+1,bb,tb,sums-a[n-ta]));
}
if(bb+tb<n)
{
maxn=cal_max(maxn,sums-dfs(ba,ta,bb+1,tb,sums-b[bb+1]),sums-dfs(ba,ta,bb,tb+1,sums-b[n-tb]));
}
dp[ba][ta][bb][tb]=maxn;
return maxn;
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
sum=0;
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
sum+=b[i];
}
printf("%d\n",dfs(0,0,0,0,sum));
}
return 0;
}
2013 吉林通化邀请赛 Play Game 记忆化搜索的更多相关文章
- 2013 吉林通化邀请赛 D-City 离线型的并查集
题意:给定n个点和m条边,问你拆掉前i条边后,整个图的连同城市的数量. i从1到m. 思路:计算连通的城市,很容易想到并查集,但是题目里是拆边,所以我们可以反向去做. 存下拆边的信息,从后往前建边. ...
- 2013 吉林通化邀请赛 Tutor 有点坑的水题
计算12个数的和的平均数.四舍五入,不能有后导0. 我的做法是,将答案算出后,乘以1000,然后看个位是否大于等于5,判断是否要进位…… #include<iostream> #inclu ...
- HDU 4597 Play Game (DP,记忆化搜索)
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total S ...
- HDU 4597 Play Game (记忆化搜索博弈DP)
题意 给出2*n个数,分两列放置,每列n个,现在alice和bob两个人依次从任意一列的对头或队尾哪一个数,alice先拿,且两个人都想拿最多,问alice最后能拿到数字总和的最大值是多少. 思路 4 ...
- HDU 1142 A Walk Through the Forest (记忆化搜索 最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- hdu 4628 Pieces(状态压缩+记忆化搜索)
Pieces Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- POJ 1191 记忆化搜索
(我是不会告诉你我是抄的http://www.cnblogs.com/scau20110726/archive/2013/02/27/2936050.html这个人的) 一开始没有想到要化一下方差的式 ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
随机推荐
- ORA-01092 ORA-12432: LBAC error: zllegnp:OCIStmtExecute 故障一例
最近由于数据库hang住,无奈之下直接干掉了pmon进程,再次启动的时候收到了ORA-01092: ORACLE instance terminated. Disconnection forced以及 ...
- perl学习(9) 实例:取出操作时间最长的100个记录
需求描述: 日志记录了一次操作的时间,即server端接收包到发送结果到client端的时间,取出操作时间最长的100个记录. 日志信息片段: [2013-09-13 15:23:50,445.500 ...
- android源码地址及下载介绍
git clone https://android.googlesource.com/device/common.git git clone https://android.googlesour ...
- EasyUI - Layout 布局控件
效果: Html代码: <div id="cc" class="easyui-layout" style="width: 600px; heig ...
- 关于android的nfc问题
最近在研究android的nfc问题 首先再网上有很多关于android nfc 读写的问题,但是大多数都是关于Mifare Classic类型卡的读写,我百试不得骑解,于是自己写了一些程序供大家参考 ...
- Poj 3771 hdu 3405
poj 3771 http://poj.org/problem?id=3771 wiki Prim http://zh.wikipedia.org/wiki/%E6%99%AE%E6%9E%97%E5 ...
- u盘安装ubuntu10.04 server.txt
10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...
- mysql出现Waiting for table metadata lock的原因及解决方案
最近经常遇到mysql数据库死锁,郁闷死, show processlist; 时 Waiting for table metadata lock 能一直锁很久 下面有官网的一段话,可以理解下 htt ...
- TEXT文本编辑框3 点击按钮添加文本至文本输入框
In this exercise a function that loads the texts of an internal table into the text window, is imple ...
- fedora 搭建pptp vpn server
1 首先去sourceforge上下载pptpd的源码 http://sourceforge.net/projects/poptop/files/?source=navbar 2 对源码进行编译 ./ ...