zoukankan      html  css  js  c++  java
  • HDU 4597 Play Game

    题目链接

    什么都不想说,最近状态暴跌。。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 int p[4][101];
     6 int sum[30][30];
     7 int dp1[30][30],dp2[30][30];
     8 int dp[30][30][30][30];
     9 int dfs1(int x1,int y1)
    10 {
    11     if(dp1[x1][y1])
    12     return dp1[x1][y1];
    13     if(x1 == y1)
    14     return dp1[x1][y1] = p[1][x1];
    15     return dp1[x1][y1] = max(sum[1][y1]-sum[1][x1]-dfs1(x1+1,y1)+p[1][x1],sum[1][y1-1]-sum[1][x1-1]-dfs1(x1,y1-1)+p[1][y1]);
    16 }
    17 int dfs2(int x1,int y1)
    18 {
    19     if(dp2[x1][y1])
    20     return dp2[x1][y1];
    21     if(x1 == y1)
    22     return dp2[x1][y1] = p[2][x1];
    23     return dp2[x1][y1] = max(sum[2][y1]-sum[2][x1]-dfs2(x1+1,y1)+p[2][x1],sum[2][y1-1]-sum[2][x1-1]-dfs2(x1,y1-1)+p[2][y1]);
    24 }
    25 int dfs(int x1,int y1,int x2,int y2)
    26 {
    27     int maxz = 0;
    28     if(dp[x1][y1][x2][y2])
    29     return dp[x1][y1][x2][y2];
    30     if(x1 == y1&&x2 == y2)
    31     return dp[x1][y1][x2][y2] = max(p[1][x1],p[2][x2]);
    32     else if(x1 == y1)
    33     {
    34         maxz = sum[2][y2]- sum[2][x2-1]-dfs2(x2,y2)+p[1][x1];
    35         maxz = max(maxz,sum[1][y1]-sum[1][x1-1]+sum[2][y2]-sum[2][x2]-dfs(x1,y1,x2+1,y2)+p[2][x2]);
    36         maxz = max(maxz,sum[1][y1]-sum[1][x1-1]+sum[2][y2-1]-sum[2][x2-1]-dfs(x1,y1,x2,y2-1)+p[2][y2]);
    37     }
    38     else if(x2 == y2)
    39     {
    40         maxz = sum[1][y1] - sum[1][x1-1] - dfs1(x1,y1) + p[2][x2];
    41         maxz = max(maxz,sum[1][y1]-sum[1][x1]+sum[2][y2]-sum[2][x2-1]-dfs(x1+1,y1,x2,y2)+p[1][x1]);
    42         maxz = max(maxz,sum[1][y1-1]-sum[1][x1-1]+sum[2][y2]-sum[2][x2-1]-dfs(x1,y1-1,x2,y2)+p[1][y1]);
    43     }
    44     else
    45     {
    46         maxz = max(maxz,sum[1][y1]-sum[1][x1]+sum[2][y2]-sum[2][x2-1]-dfs(x1+1,y1,x2,y2)+p[1][x1]);
    47         maxz = max(maxz,sum[1][y1-1]-sum[1][x1-1]+sum[2][y2]-sum[2][x2-1]-dfs(x1,y1-1,x2,y2)+p[1][y1]);
    48         maxz = max(maxz,sum[1][y1]-sum[1][x1-1]+sum[2][y2]-sum[2][x2]-dfs(x1,y1,x2+1,y2)+p[2][x2]);
    49         maxz = max(maxz,sum[1][y1]-sum[1][x1-1]+sum[2][y2-1]-sum[2][x2-1]-dfs(x1,y1,x2,y2-1)+p[2][y2]);
    50     }
    51     return dp[x1][y1][x2][y2] = maxz;
    52 }
    53 int main()
    54 {
    55     int t,n,i,j;
    56     scanf("%d",&t);
    57     while(t--)
    58     {
    59         memset(dp,0,sizeof(dp));
    60         memset(dp1,0,sizeof(dp1));
    61         memset(dp2,0,sizeof(dp2));
    62         memset(sum,0,sizeof(sum));
    63         scanf("%d",&n);
    64         for(i = 1; i <= 2; i ++)
    65         {
    66             for(j = 1; j <= n; j ++)
    67             {
    68                 scanf("%d",&p[i][j]);
    69                 sum[i][j] = sum[i][j-1] + p[i][j];
    70             }
    71         }
    72         printf("%d
    ",dfs(1,n,1,n));
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    软件工程最后一次作业
    软件工程第二次结对作业
    软件工程第三次作业
    软件工程第二次个人作业
    软件工程第二次作业
    软件工程第一次作业
    2020软件工程最后一次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/naix-x/p/3287995.html
Copyright © 2011-2022 走看看