题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597

感觉很不错的区间DP,又做了一遍,感觉自己对边界的处理还是很欠缺

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. using namespace std;
  6. #define maxn 21
  7. int sum1[maxn];
  8. int sum2[maxn];
  9. int q1[maxn];
  10. int q2[maxn];
  11. int n;
  12. int dp[maxn][maxn][maxn][maxn];
  13. int dfs(int s1, int e1,int s2,int e2)
  14. {
  15. int tmp1,tmp2;
  16. int ans;
  17. if(s1== && s2== && e1== && e2==) return dp[s1][e1][s2][e2]=;
  18. if(dp[s1][e1][s2][e2]>=) return dp[s1][e1][s2][e2];
  19. if(s1== && e1== && s2==e2) return dp[][][s2][e2]=q2[s2];
  20. if(s1==e1 && s2== && e2==) return dp[s1][e1][][]=q1[s1];
  21. if(s1== && e1 ==)
  22. ans=max(q2[s2]+sum2[e2]-sum2[s2]-dfs(,,s2+,e2),q2[e2]+sum2[e2-]-sum2[s2-]-dfs(,,s2,e2-));
  23. else
  24. if(s2== && e2 ==)
  25. ans=max(q1[s1]+sum1[e1]-sum1[s1]-dfs(s1+,e1,,),q1[e1]+sum1[e1-]-sum1[s1-]-dfs(s1,e1-,,));
  26. else
  27. if(s1==e1 && s2==e2)
  28. ans=max(q1[s1],q2[s2]);
  29. else
  30. if(s1==e1)
  31. {
  32. tmp1=max(q2[s2]+sum2[e2]-sum2[s2]+q1[s1]-dfs(s1,e1,s2+,e2),q2[e2]+sum2[e2-]-sum2[s2-]+q1[s1]-dfs(s1,e1,s2,e2-));
  33. tmp2=max(tmp1,q1[s1]+sum2[e2]-sum2[s2-]-dfs(,,s2,e2));
  34. ans=max(tmp1,tmp2);
  35. }
  36. else
  37. if(s2==e2)
  38. {
  39. tmp1=max(q1[s1]+sum1[e1]-sum1[s1]+q2[s2]-dfs(s1+,e1,s2,e2),q1[e1]+sum1[e1-]-sum1[s1-]+q2[s2]-dfs(s1,e1-,s2,e2));
  40. tmp2=max(tmp1,q2[s2]+sum1[e1]-sum1[s1-]-dfs(s1,e1,,));
  41. ans=max(tmp1,tmp2);
  42. }
  43. else
  44. {
  45. tmp1=max(q1[s1]+sum2[e2]-sum2[s2-]+sum1[e1]-sum1[s1]-dfs(s1+,e1,s2,e2),q1[e1]+sum2[e2]-sum2[s2-]+sum1[e1-]-sum1[s1-]-dfs(s1,e1-,s2,e2));
  46. tmp2=max(q2[s2]+sum2[e2]-sum2[s2]+sum1[e1]-sum1[s1-]-dfs(s1,e1,s2+,e2),q2[e2]+sum2[e2-]-sum2[s2-]+sum1[e1]-sum1[s1-]-dfs(s1,e1 ,s2,e2-));
  47. ans=max(tmp1,tmp2);
  48. }
  49. return dp[s1][e1][s2][e2]=ans;
  50. }
  51. int main()
  52. {
  53. int t;
  54. scanf("%d",&t);
  55. while(t--)
  56. {
  57. scanf("%d",&n);
  58. sum1[]=sum2[]=;
  59. for(int i=;i<=n;i++)
  60. {
  61. scanf("%d",&q1[i]);
  62. sum1[i]=sum1[i-]+q1[i];
  63. }
  64. for(int i=;i<=n;i++)
  65. {
  66. scanf("%d",&q2[i]);
  67. sum2[i]=sum2[i-]+q2[i];
  68. }
  69. memset(dp,-,sizeof(dp));
  70. dp[][n][][n]=dfs(,n,,n);
  71. cout<<dp[][n][][n]<<endl;
  72. }
  73. return ;
  74. }

hdu4597 Play Game DP的更多相关文章

  1. hdu4597 区间dp

    //Accepted 1784 KB 78 ms //区间dp //dp[l1][r1][l2][r2] 表示a数列从l1到r1,b数列从l2到r2能得到的最大分值 // #include <c ...

  2. hdu4597 Play Game 区间DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 全国邀请赛通化赛区第8题--题目重现 思路: 区间DP的思想,想法是队友想出来的,感觉很秒,自己 ...

  3. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  4. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  5. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  6. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  7. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  8. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

随机推荐

  1. android 热更新 tinker 从零开始到使用

    这几天项目完结了,闲来无事,想起来了以前研究的热更新,那个开源的只有nvwa.recoo,等,不是很好用,最近听说tinker开源一段时间了,用的人还挺多,决定研究一下! 首先进入了官方文档 http ...

  2. Unity3d在Window上使用SAPI进行语音识别

    前言 在之前<Unity利用Sapi进行windows语音开发>中,本计划不准备继续做语音识别.因为在unity3d中已经提供了语音识别的相关方法,详见unity3d的官方文档:https ...

  3. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  4. .NET Core开源组件:后台任务利器之Hangfire

    一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always ru ...

  5. Codeforces Round #384 (Div. 2).C

    C. Vladik and fractions time limit per test 1 second memory limit per test 256 megabytes input stand ...

  6. ubuntu 12.04 x86_64:java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons

    sy@sy-Aspire-:~$ .0_155965261/configuration/.log !SESSION -- ::39.595 ------------------------------ ...

  7. C#对文件操作(基本的读写以及压缩和解压)

    主要是针对单个文件进行读写操作和压缩操作:用到的主要C#类有FileStream.FileInfo.StreamWrite.StreamRead.GZipStream. 字符数组和字节数组的转换: ] ...

  8. 【shell编程基础0】bash shell编程的基本配置

    前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...

  9. spring之注解

    1.@Autowired 可以对成员变量.方法和构造函数进行自动配置(根据类型进行自动装配) public class UserImpl implements User { @Autowired pr ...

  10. C++ 中关于optional 使用过程中遇到的问题

    头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...