zoukankan      html  css  js  c++  java
  • HDU2859

    题意

    给你一个n*n的矩阵,矩阵中只含有26个小写字母,求其中最大的对称矩阵的大小(对称矩阵:对角线是左下到右上)

    分析

    主要是根据题意找到突破口:每个对称矩阵的最下角

    定义:以dp[i][j]为左下角的最大对称矩阵

    转移:扩展的时候转移一下就好

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<cstdio>
    using namespace std;
    
    const int maxn = 1000+10;
    
    int dp[maxn][maxn];
    int n;
    char s[maxn][maxn];
    
    int main()
    {
        while(scanf("%d", &n)!=EOF)
        {
            if(n==0)
                break;
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
            {
                scanf("%s", s[i]+1);
            }
            int maxx=0;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    int x=i, y=j;
                    if(x==1||y==n)
                    {
                        dp[i][j]=1;
                    }
                    else
                    {
    
                        while(s[x][j] == s[i][y]&&x>=1&&y<=n)
                        {
                            x--;
                            y++;
                        }
                        int ans=i-x;
                        if(ans>=dp[i-1][j+1]+1) dp[i][j]=dp[i-1][j+1]+1;
                        else dp[i][j]=ans;
    
                    }
                    maxx=max(maxx,dp[i][j]);
                }
            }
            printf("%d
    ", maxx);
        }
        return 0;
    }
    View Code
    要么优秀要么生锈
  • 相关阅读:
    POJ 1995
    POJ 3233
    HDU 2815
    POJ 2417
    POJ 3243
    HDU 3579 线性同余方程组
    HDU 1573
    POJ 2115
    POJ 2891
    HDU 2035 不忍直视的水
  • 原文地址:https://www.cnblogs.com/Superwalker/p/7978240.html
Copyright © 2011-2022 走看看