zoukankan      html  css  js  c++  java
  • HDU 4618 Palindrome Sub-Array(DP)

    题目链接

    我还是图样啊....比赛的时候没敢暴力去搜...

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <map>
     5 #include <ctime>
     6 #include <cmath>
     7 using namespace std;
     8 #define LL __int64
     9 char dp[301][301][301];
    10 int p[301][301];
    11 int n,m;
    12 int dfs(int x,int y,int step)
    13 {
    14     int i,j,k;
    15     if(step == 1)
    16     return 1;
    17     else if(step == 0)
    18     return 1;
    19     if(x > n||y > m)
    20     return 2;
    21     if(dp[x][y][step] == 1)
    22     return 1;
    23     else if(dp[x][y][step] == 2)
    24     return 2;
    25     int flag = 1;
    26     for(i = x,j = x+step-1,k = 1;k <= step/2&&flag;i ++,j --,k ++)
    27     {
    28         if(p[i][y] == p[j][y]&&p[i][y] == p[i][y+step-1])
    29         ;
    30         else
    31         flag = 0;
    32     }
    33     for(i = y,j = y+step-1,k = 1;k <= step/2&&flag;i ++,j --,k ++)
    34     {
    35         if(p[x][i] == p[x][j]&&p[x][i] == p[x+step-1][i])
    36         ;
    37         else
    38         flag = 0;
    39     }
    40     if(flag == 0)
    41     {
    42         dp[x][y][step] = 2;
    43         return 2;
    44     }
    45     else if(flag)
    46     {
    47         return dp[x+1][y+1][step-2] = dfs(x+1,y+1,step-2);
    48     }
    49     return 0;
    50 }
    51 int main()
    52 {
    53     int t,i,j,k,flag;
    54     scanf("%d",&t);
    55     while(t--)
    56     {
    57         scanf("%d%d",&n,&m);
    58         memset(dp,0,sizeof(dp));
    59         for(i = 1;i <= n;i ++)
    60         {
    61             for(j = 1;j <= m;j ++)
    62             {
    63                 scanf("%d",&p[i][j]);
    64             }
    65         }
    66         flag = 1;
    67         for(i = min(n,m);i >= 2&&flag;i --)
    68         {
    69             for(j = 1;j <= n-i+1&&flag;j ++)
    70             {
    71                 for(k = 1;k <= m-i+1&&flag;k ++)
    72                 {
    73                     if(dfs(j,k,i) == 1)
    74                     flag = 0;
    75                 }
    76             }
    77             if(!flag) break;
    78         }
    79         printf("%d
    ",i);
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    window对象open方法详解
    jse中将数据反转
    jqery实现10X10的表格,双击消失
    Filter实现登录功能限制
    jQuery全选功能
    Fliter设置字符编码,解决中文问题
    innerHTML、innerText和outerHTML、outerText的区别
    Delphi ActiveX Form的使用实例
    Mina 客户端,服务器简单Demo
    Mina 资料
  • 原文地址:https://www.cnblogs.com/naix-x/p/3215215.html
Copyright © 2011-2022 走看看