博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2859 Phalanx
阅读量:5227 次
发布时间:2019-06-14

本文共 960 字,大约阅读时间需要 3 分钟。

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

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

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

#include 
#include
#include
#include
#include
#include
#include
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\n", Max); } return 0;}

 

转载于:https://www.cnblogs.com/mengzhong/p/5455715.html

你可能感兴趣的文章
计算广告学学习(一) 广告的目的与有效性模型
查看>>
隐藏内容但仍保持占位的css写法
查看>>
圣杯布局和双飞翼布局区别
查看>>
CSS3中的transition属性详解
查看>>
ip通信回顾
查看>>
强哥CSS学习笔记
查看>>
golang学习笔记
查看>>
RNN - LSTM - GRU
查看>>
转:查看LINQ生成SQL语句的几种方法
查看>>
使用Uploadify实现上传图片生成缩略图例子,实时显示进度条
查看>>
cygwin下使用nutch的一个注意点
查看>>
一个通用的Makefile(针对非模块类-pro)
查看>>
RIP笔记
查看>>
指针练习
查看>>
python学习笔记(三)
查看>>
牛人的博客
查看>>
[bzoj] 1040 骑士 || 基环外向树dp
查看>>
LeetCode Golang 4. 寻找两个有序数组的中位数
查看>>
Nginx 访问认证
查看>>
Python 列表去重(数组)的几种方法
查看>>