九野的博客,转载请注明出处:  http://blog.csdn.net/acmmmm/article/details/10833941

题意:给定T个测试数据,下面有2副牌,每副n张,每张都有一个分值

问:2个人轮流取牌,每次取一张(从任意一副的牌顶或牌底取),先手可获得的最大分值

开始往博弈想了,这题是记忆化搜索

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<set>
  5. #include<math.h>
  6. #include<string.h>
  7. #define N 25
  8. using namespace std;
  9.  
  10. int card1[N],card2[N],sum1[N],sum2[N];
  11. int dp[N][N][N][N]; // dp[below1][top1][below2][top2] 表示当2个牌堆是这样时可以取得的最大值
  12. inline int Max(int a,int b){return a>b?a:b;}
  13.  
  14. int dfs(int below1,int top1,int below2,int top2){//返回 牌堆是这样时能取得的最大值
  15. if(dp[below1][top1][below2][top2]!=-1)return dp[below1][top1][below2][top2];
  16.  
  17. if(below1>top1 && below2>top2) {//牌堆取完
  18. dp[below1][top1][below2][top2]=0;
  19. return 0;
  20. }
  21.  
  22. int sum=0,ans=0;//sum表示剩下牌堆的总分
  23. if(below1<=top1)sum+= sum1[top1]-sum1[below1-1];
  24. if(below2<=top2)sum+= sum2[top2]-sum2[below2-1];
  25. if(below1<=top1){
  26. ans=Max(ans,sum-dfs(below1+1,top1,below2,top2));
  27. ans=Max(ans,sum-dfs(below1,top1-1,below2,top2));
  28. }
  29. if(below2<=top2){
  30. ans=Max(ans,sum-dfs(below1,top1,below2+1,top2));
  31. ans=Max(ans,sum-dfs(below1,top1,below2,top2-1));
  32. }
  33. return dp[below1][top1][below2][top2]=ans;
  34. }
  35. int main(){
  36. int T,i,n;scanf("%d",&T);
  37. while(T--)
  38. {
  39. scanf("%d",&n);
  40. for(i=1;i<=n;i++)scanf("%d",&card1[i]);
  41. for(i=1;i<=n;i++)scanf("%d",&card2[i]);
  42. sum1[0]=sum2[0]=0;
  43. for(i=1;i<=n;i++)
  44. sum1[i]=sum1[i-1]+card1[i],sum2[i]=sum2[i-1]+card2[i];
  45. memset(dp,-1,sizeof(dp));
  46. printf("%d\n",dfs(1,n,1,n));
  47. }
  48. return 0;
  49. }

HDU 4597 Play Game 2013 ACM-ICPC吉林通化全国邀请赛H题的更多相关文章

  1. hdu 4438 第37届ACM/ICPC 天津赛区现场赛H题

    题意:Alice和Bob两个人去打猎,有两种(只)猎物老虎和狼: 杀死老虎得分x,狼得分y: 如果两个人都选择同样的猎物,则Alice得分的概率是p,则Bob得分的概率是(1-p): 但是Alice事 ...

  2. HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 题目大意:给一个原序列N,再给出一个序列M,问从N中一共可以找出多少个长度为m的序列,序列中的数 ...

  3. HDU 4751 Divide Groups 2013 ACM/ICPC Asia Regional Nanjing Online

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 题目大意:判断一堆人能否分成两组,组内人都互相认识. 解题思路:如果两个人不是相互认识,该两人之 ...

  4. HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4731 题解:规律题,我们可以发现当m大于等于3时,abcabcabc……这个串的回文为1,并且字典数最小 ...

  5. HDU 4734 F(x) 2013 ACM/ICPC 成都网络赛

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4734 数位DP. 用dp[i][j][k] 表示第i位用j时f(x)=k的时候的个数,然后需要预处理下小 ...

  6. hdu 4497 GCD and LCM(2013 ACM-ICPC吉林通化全国邀请赛——题目重现)

    质分解 + 简单计数.当时去比赛的时候太年轻了...这道题都没敢想.现在回过头来做了一下,发现挺简单的,当时没做这道题真是挺遗憾的.这道题就是把lcm  / gcd 质分解,统计每个质因子的个数,然后 ...

  7. hdu 4431 第37届ACM/ICPC 天津赛区现场赛A题 枚举

    题意:就是给了13张牌.问增加哪些牌可以胡牌.m是数字,s是条,p是筒,c是数字 胡牌有以下几种情况: 1.一个对子 +  4组 3个相同的牌或者顺子.  只有m.s.p是可以构成顺子的.东西南北这样 ...

  8. 2013 ACM/ICPC Asia Regional Changsha Online – C题 Color Representation Conversion (坑爹模拟题)

    题意:给你三种颜色表示模式,RGB,HSV和HSL,实现任意模式之间两两转化. 1.最好别看题目中给的转化公式描述,我觉得叙述的一点也不清楚,看维基百科,把维基百科上的公式一句一句翻译过来就好 2.在 ...

  9. hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...

随机推荐

  1. Android4.2以及最新SDK的尝鲜使用

    谷歌已经公布了Android4.2,而且也对应的更新了SDK到4.2.事实上最基本的是谷歌这次帮开发人员把eclipse.ADT.SDK整合 到了一起,我们仅仅须要下载一个ADT Boundle,就能 ...

  2. 2014年国内经常使用移动client推送服务介绍和比較

    经过5年移动互联网的迅速发展,如今推送服务方面国内已经出现了非常多产品,比如极光推送,个推,一推,百度推送,友盟推送等,我们在选择推送服务时,首先排除了付费的推送服务,重点调查了免费的推送服务.   ...

  3. service入门—电话监听器

    1.继承Service类 2.在清单文件进行配置(因为Service属于四大组件之一) <service android:name=".PhoneStatusService" ...

  4. nodejs安装不了和npm安装不了的解决方法

    http://caibaojian.com/nodejs-roll-back.html

  5. Ubuntu14.04更新源

    Ubuntu14.04更新源 http://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html Ubuntu源 http://wiki.ub ...

  6. javascript每日一练(二)——javascript(函数,数组)

    一.函数 什么是函数 function show(){}//不带参数 function show(){return 123;}//不带参数,有返回值 function show(arg1, arg2, ...

  7. delphi模态窗体最小化会隐藏的问题

    在使用delphi创建模态窗体的时候最小化窗体会导致最小化的窗体不可见,再次点击主窗体才会显示. 在这个模态窗体中增加以下函数 procedure WmSysCommand(var msg: TMes ...

  8. 一个大学生屌丝心中的seo梦

    最 近这几天,我利用空闲时间去网上看到很多关于seoer的生存现状,尤为的感伤.因为自已也是一位爱好seo和利用闲于时间来学习seo的一个大学生屌 丝,在学习的过程中,有辛酸和泪水.但也有快乐,感觉一 ...

  9. 以交互方式使用exp/imp的演示

    众所周知,用exp/imp对数据库进行逻辑备份.包含表.用户,整个数据库,我们通常所熟悉的是使用命令行指定參数的方式来做的.以下我来演示一下不太经常使用的以交互方式的操作,操作非常easy.就是仅仅要 ...

  10. QNX简介<转载>

     QNX QNX是由QNX软件系统有限公司开发的实时操作系统. http://blog.csdn.net/happyhell/article/details/7087199 基本特征 * QNX是一个 ...