题目链接:hdu 4597 Play Game

题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略。问说第一个人对多的分值。

解题思路:记忆化搜索,状态出来就很水,dp[fl][fr][sl][sr][flag],表示第一堆牌上边取到fl,以下取到fr,相同sl。sr为第二堆牌,flag为第几个人在取。假设是第一个人,dp既要尽量大,假设是第二个人,那么肯定尽量小。

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int N = 25;
const int INF = 0x3f3f3f3f;
int n, f[N], s[N], dp[N][N][N][N][2]; void init () {
memset(dp, -1, sizeof(dp)); scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &f[i]);
for (int i = 1; i <= n; i++)
scanf("%d", &s[i]);
} int solve (int fl, int fr, int sl, int sr, int flag) {
int& ans = dp[fl][fr][sl][sr][flag];
if (fl > fr && sl > sr)
return ans = 0; if (ans != -1)
return ans; if (flag) {
ans = 0;
if (fl <= fr) {
ans = max(ans, solve(fl+1, fr, sl, sr, 1-flag) + f[fl]);
ans = max(ans, solve(fl, fr-1, sl, sr, 1-flag) + f[fr]);
} if (sl <= sr) {
ans = max(ans, solve(fl, fr, sl+1, sr, 1-flag) + s[sl]);
ans = max(ans, solve(fl, fr, sl, sr-1, 1-flag) + s[sr]);
}
} else {
ans = INF;
if (fl <= fr) {
ans = min(ans, solve(fl+1, fr, sl, sr, 1-flag));
ans = min(ans, solve(fl, fr-1, sl, sr, 1-flag));
} if (sl <= sr) {
ans = min(ans, solve(fl, fr, sl+1, sr, 1-flag));
ans = min(ans, solve(fl, fr, sl, sr-1, 1-flag));
}
}
return ans;
} int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
init ();
printf("%d\n", solve(1, n, 1, n, 1));
}
return 0;
}

最新文章

  1. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
  2. 【kAri OJ】621. 廖神的树
  3. Android PopupWindow 消失后的回掉方法
  4. POJ 1656
  5. WScript.SendKeys()的sendkeys发送组合键以及特殊字符
  6. 转自知乎,亲民好酒推荐 分类: fool_tree的笔记本 2014-11-08 17:37 652人阅读 评论(0) 收藏
  7. FTP软件Filezilla出现“读取目录列表失败”的解决办法
  8. js中的AMD规范
  9. Redmine管理项目2-邮件通知
  10. Ajax原理、优缺点及应用场景
  11. C#调用PB写的com组件dll
  12. 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
  13. java正则表达式验证金额
  14. python selenium 百度登录
  15. Docker命令使用详解(转)
  16. keil软件错误总结.doc
  17. SpringCloud注册中心环境搭建euraka
  18. vs2017默认以管理员运行
  19. 短URL
  20. Current urgent plan(3/30)

热门文章

  1. 【分块】bzoj2120 数颜色
  2. 【费用流】【Next Array】费用流模板(spfa版)
  3. Problem R: 求斐波那契数列的前n项值
  4. 【R笔记】apply函数族
  5. IO 流(File)
  6. Android之startActivityForResult
  7. 阿里云(ECS)Linux客户端SSH会话连接超时OperationTimedOut
  8. 基于tiny4412的u-boot移植(二)
  9. SpringBoot下文件上传与下载的实现
  10. redis基本命令,配置参数