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;
- }
hdu 4597 Play Game(记忆化搜索)的更多相关文章
- HDU 4597 Play Game(记忆化搜索,深搜)
题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...
- HDU 4597 Play Game (记忆化搜索博弈DP)
题意 给出2*n个数,分两列放置,每列n个,现在alice和bob两个人依次从任意一列的对头或队尾哪一个数,alice先拿,且两个人都想拿最多,问alice最后能拿到数字总和的最大值是多少. 思路 4 ...
- [HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others) M ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- HDU 3779 Railroad(记忆化搜索)
Railroad Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
- hdu 5535 Cake 构造+记忆化搜索
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给定n与m,其中1<= n <= 1e5,2 <= m <= 10;问 ...
- HDU 4597 Play Game 记忆化DP
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Proble ...
- HDU 4597 记忆化搜索
² 博弈取牌—记忆化搜索 题目描述: 有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高.问A先取,他能 ...
随机推荐
- 【Trie】bzoj1212 [HNOI2004]L语言
枚举每个文章里已经在Trie中被标记为可能是分割处的字符,然后再从此处跑Trie,继续向后标记.由于单词数很少,因此复杂度可以接受,O(n*m*Len). #include<cstdio> ...
- 13test04:捕鱼
#include<iostream> using namespace std; int main() { int fish_sum,flag=1; for(fish_sum=6;flag; ...
- 【读书笔记】Elasticsearch集成Hadoop最佳实践
前言 本文记录[Elasticsearch集成Hadoop最佳实战]读书笔记 本书总计209页,共7章节,计划时间:20180712-20180717 (每天至少40页) 本文代码地址: https: ...
- 静态NAT地址转换
1.配置路由器端口ip(两个端口需要设置两个网段) Router(config)#inter f0/1 Router(confiog-if)#ip add 202.1.1.2 255.255.255. ...
- hadoop InputFormat getSplits
/** Splits files returned by {@link #listStatus(JobConf)} when * they're too big.*/ public InputSpli ...
- Word中对象显示不完整
选中上下文字后,右键没有段落,如果是图片的话是有的,那么我们可以点击菜单栏中段落的右下三角,在那设置单倍行距.
- 重新学习vue基础
1.创建vue实例 var vm = new Vue({ el: '#example', //选择元素 data: {a:1} //基本数据 }) 2.模板语法 (一)基本语法 <span> ...
- python 输出所有大小写字母, range()以及列表切片
所以在写的时候,只要把它们的ASCII列出,并转化成字符型chr 即可. print [chr(i) for i in range(65,91)]#所有大写字母 print [chr(i) for i ...
- 原型设计工具——Axure
1,百度百科 http://baike.baidu.com/view/3332366.htm?from_id=5056136&type=syn&fromtitle=axure& ...
- ubuntu16.04 登录密码破解方法
1:开机按Shift键,出现如下界面.(手速要快,Shift键要按时间久一点) 选择第二项 2:按回车键进入如下界面,然后选中有recovery mode的选项(第三项) 3:按e进入如下界面,并找到 ...