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

    简单二维dp。o(n^3)效率过的。不知道有没有o(n^2)的解法。

    为了方便点,先左右交换一下。

    dp[i][j]表示以[i,j]为左上角的最大对称矩阵长度

    那么dp[i][j]=min(Max,dp[i+1][j+1])+1;

    其中Max是以[i,j]为起点,i这一行和j这一列最长公共前缀的长度

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<vector>
    #include<string>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1000+10;
    char Map[maxn][maxn];
    int dp[maxn][maxn];
    int n;
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            if(!n) break;
            for(int i=0; i<n; i++) scanf("%s",Map[i]);
            for(int i=0; i<n; i++)
                for(int j=0; j<n/2; j++)
                    swap(Map[i][j],Map[i][n-j-1]);
    
            memset(dp,0,sizeof dp);
    
            int ans=0;
            for(int i=n-1; i>=0; i--)
            {
                for(int j=n-1; j>=0; j--)
                {
                    int Max=0;
                    for(int len=0;; len++)
                    {
                        if(i+len>=n||j+len>=n||Map[i][len+j]!=Map[len+i][j])
                        {
                            Max=len;
                            break;
                        }
                    }
                    Max--;
                    dp[i][j]=min(Max,dp[i+1][j+1])+1;
                    ans=max(ans,dp[i][j]);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Java之this关键字的用法
    JavaSE 之 final 初探
    LinkedList 浅析示例
    HashSet 浅析示例
    ArrayList 浅析示例
    MySQL5.7 修改密码
    IE10 和 Chrome50 对日期 new Date() 支持的区别
    databtables 设置(显示)行号
    团队管理
    财务名称
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5144944.html
Copyright © 2011-2022 走看看