HDU

来源:互联网 发布:消费观念 知乎 编辑:程序博客网 时间:2024/05/29 09:52

题目大意:给出一个字母矩阵,求最大的对称子矩阵的大小,对称轴左下到右上。
解题思路:枚举每个字母,判断上和右的字母是否相同,while 直到不同跳出。
dp 表示当前字母为子矩阵左下角时,对称矩阵的大小。

#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))const int INF = 0x3f3f3f3f;const int NINF = -INF -1;const int MAXN = 1000+5;using namespace std;int dp[MAXN][MAXN];char map[MAXN][MAXN];int n, ans;int main() {    while (scanf("%d\n", &n) && n ) {        for (int i = 0; i < n; i++)            gets(map[i]);        ans = 0;        for (int i = 0; i < n; i++)            for (int j = 0; j < n; j++) {                if (i == 0) dp[i][j] = 1;                else {                    int a = i;                    int b = j;                    while (map[a][j] == map[i][b]) {                        a--;                        b++;                        if (a < 0 || b >= n) break;                    }                    dp[i][j] = min(dp[i-1][j+1]+1, i-a);                }                if (dp[i][j] > ans) ans = dp[i][j];            }        printf("%d\n", ans);    }    return 0;}
原创粉丝点击