zoukankan      html  css  js  c++  java
  • HDU 2859 Phalanx

    题意:输入n,然后输入n行n列的字符。求这个矩阵中子矩阵是关于左下角到右上角这条线对称的最大矩阵边。

    解析:枚举每一个点作为对称轴的左下角,然后从这一点分别向上和向右寻找,知道找到一个不相等的字符,或者这个点越界,停止。

    如果这个矩阵比以这个点右上角的点大,那么更新dp[i][j]=dp[i-1][j+1]+1.否则dp[i][j]等于这个矩阵的边。

    #include <iostream>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <stack>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 1005;
    
    char str[maxn][maxn];
    int dp[maxn][maxn];
    
    int main()
    {
        int n;
        while(scanf("%d", &n),n)
        {
            for(int i=1; i<=n; i++)
            {
                scanf("%s", str[i]+1);
            }
            memset(dp, 0, sizeof(dp));
            int Max = 1;
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(i==1)
                        dp[i][j] = 1;
                    else
                    {
                        int up = i, right = j;
                        while(str[up][j]==str[i][right])
                        {
                            up--;
                            right++;
                            if(up<1||right>n)
                                break;
                        }
                        int x = i - up;
                        if(x>dp[i-1][j+1])
                            dp[i][j] = dp[i-1][j+1]+1;
                        else
                            dp[i][j] = x;
                        Max = max(Max, dp[i][j]);
                    }
                }
            }
            printf("%d
    ", Max);
        }
    
        return 0;
    }
  • 相关阅读:
    4.文本规范化处理
    2.自动文本分类
    3.文本分类的蓝图
    1.什么是文本分类
    2.文本规范化
    Python 处理和理解文本
    1.文本切分
    验证码识别
    随机函数
    Java编程思想笔记(多态)
  • 原文地址:https://www.cnblogs.com/mengzhong/p/5455715.html
Copyright © 2011-2022 走看看