博弈dp

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <string>
 5 using namespace std;
 6
 7 int d[30][30][30][30];
 8 int visit[30][30][30][30];
 9     int a[50],b[50];
10     int suma[50],sumb[50];
11
12 int dfs (int la,int ra,int lb,int rb){
13     if (d[la][ra][lb][rb])
14         return d[la][ra][lb][rb];
15     if (la>ra&&lb>rb)
16         return 0;
17     if (la>ra&&lb==rb){
18         return d[la][ra][lb][rb]=b[lb];
19     }
20     if (la==ra&&lb>rb){
21         return d[la][ra][lb][rb]=a[la];
22     }
23     int sum=suma[ra]-suma[la-1]+sumb[rb]-sumb[lb-1];
24     if (la<=ra){
25         d[la][ra][lb][rb]=max (d[la][ra][lb][rb],sum-dfs (la+1,ra,lb,rb));
26         d[la][ra][lb][rb]=max (d[la][ra][lb][rb],sum-dfs (la,ra-1,lb,rb));
27     }
28     if (lb<=rb){
29         d[la][ra][lb][rb]=max (d[la][ra][lb][rb],sum-dfs (la,ra,lb+1,rb));
30         d[la][ra][lb][rb]=max (d[la][ra][lb][rb],sum-dfs (la,ra,lb,rb-1));
31     }
32     return d[la][ra][lb][rb];
33 }
34
35 int main (){
36     int t,n;
37     scanf ("%d",&t);
38     while (t--){
39         cin>>n;
40         suma[0]=0;
41         sumb[0]=0;
42         for (int i=1;i<=n;i++){
43             scanf ("%d",&a[i]);
44             suma[i]=suma[i-1]+a[i];
45         }
46         for (int i=1;i<=n;i++){
47             scanf ("%d",&b[i]);
48             sumb[i]=sumb[i-1]+b[i];
49         }
50         memset (d,0,sizeof d);
51         dfs (1,n,1,n);
52         cout<<d[1][n][1][n]<<endl;
53     }
54     return 0;
55 }

转载于:https://www.cnblogs.com/gfc-g/p/3963802.html

HDU 4597 Play Game相关推荐

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

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

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

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

  3. 【HDU - 4597】Play Game(博弈dp)

    题干: Alice and Bob are playing a game. There are two piles of cards. There are N cards in each pile, ...

  4. hdu 4597 Play Game(区间dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:  hdu-4597 题意 Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个     ...

  5. hdu 4597 2013吉林通化邀请赛 Play Game 记忆化搜索

    dp[ba][ta][bb][tb]表示a堆牌从下面拿了ba张,从上面拿了ta张.b堆牌从下面拿了bb张,从上面拿了tb张.当前玩家能得到的最大的分数. 扩展方式有4种,ba+1,ta+1,bb+1, ...

  6. c语言字母和空格占的字节数,C语言之计算字符串最后一个单词的长度,单词以空格隔开...

    Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语 ...

  7. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  8. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  9. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

最新文章

  1. 《资安人》:迈向成功SOC之路
  2. hi3516配置wifi_HISI 3516A移植mt7601u的wifi驱动
  3. MyEclipse 的 TCP/IP Monitor 的使用
  4. PLSQL连接oracel数据库_用户无法登陆_oci.dll_配置问题
  5. Redis安装+启动报错
  6. 如何应对被地下的Oracle口令加密算法(2)
  7. 二叉树:一入递归深似海,从此offer是路人
  8. 学习理论:理论联系实际--演绎归纳演绎
  9. 排列组合常见公式集合
  10. springboot 返回二进制文件流
  11. Java自定义类的属性、方法结合数组简单使用
  12. 首届全国智能制造(中国制造2025)创新创业大赛在京启动
  13. SDUT-程序设计基础-实验1-顺序结构
  14. 超高分辨率大屏拼接工作站硬件选型
  15. 马来西亚php怎么样,科学网—游马来西亚的几点感想 - 梁生的博文
  16. HUST1005 渊子赛马【枚举】
  17. rx6800s什么水平N卡 rx6800s什么水平
  18. java常用加密算法
  19. I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之声卡驱动移植
  20. 初学者古琴入门知识——【唐畅古琴】

热门文章

  1. 计算机组成原理—高速缓冲存储器
  2. [paper reading] RetinaNet
  3. Hbase数据结构+hbase shell基本语法
  4. 信息检索:“众筹”专利分析
  5. 【马来西亚】娘惹的含义
  6. 准备mybatis-spring
  7. 前端零碎问题(四)css3
  8. Spring注入静态类型
  9. php和java的一些比较
  10. elasticsearch集群搭建实例