hdu 4618 Palindrome Sub-Array
来源:互联网 发布:mac软件助手哪个好用 编辑:程序博客网 时间:2024/06/06 03:27
数据弱 dp 暴力都能过
dp:
d(i,j,k)表示左上角坐标为(i,j),k为正方形边长
初始化 d(i,j,0)=1 d(i,j,1)=1
如果d(i+1,j+1,k-2)=1,且上下两个外围的相等且回文,左右两个外围的相等且回文;d(i,j,k)=1,否则d(i,j,k)=0
#include <stdio.h>#include <string.h>int a[310][310];bool d[310][310][310];int check(int x,int y,int l){ for(int i=y;i<=y+l-1;i++) if(a[x][i]!=a[x+l-1][i])return 0; for(int i=x;i<=x+l-1;i++) if(a[i][y]!=a[i][y+l-1])return 0; for(int i=x;i<=x+l/2;i++) if(a[i][y]!=a[x+l-1-(i-x)][y])return 0; for(int i=y;i<=y+l/2;i++) if(a[x][i]!=a[x][y+l-1-(i-y)])return 0; return 1;}int main(){ int T; int n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(d,0,sizeof(d)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); d[i][j][0]=1; d[i][j][1]=1; } } int l=n<m?n:m; int ans=1; for(int k=2;k<=l;k++) { for(int i=1;i<=n;i++) { if(i+k-1>n)break; for(int j=1;j<=m;j++) { if(j+k-1>m)break; if(d[i+1][j+1][k-2]&&check(i,j,k)) { d[i][j][k]=1; if(k>ans)ans=k; } } } } printf("%d\n",ans); } return 0;}
暴力
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <algorithm>#include <vector>#include <queue>#include <map>using namespace std;int s[305][305];int n,m;int l;int ans;void init(){ scanf("%d%d",&n,&m); for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { scanf("%d",&s[i][j]); } }}void solve(){ ans = 1; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(min(n-i,m-j) <= ans) { break; } l = min(n-i,m-j); while(l > ans) { if(s[i][j]==s[i+l-1][j]&&s[i+l-1][j]==s[i][j+l-1]&&s[i][j+l-1]==s[i+l-1][j+l-1]) { int q = 0; for(int k = 1; k * 2 < l; k++) { if(s[i+k][j]==s[i+l-1-k][j]&&s[i+l-1-k][j]==s[i+k][j+l-1]&&s[i+k][j+l-1]==s[i+l-1-k][j+l-1]) { if(s[i][j+k]==s[i+l-1][j+k]&&s[i+l-1][j+k]==s[i][j+l-1-k]&&s[i][j+l-1-k]==s[i+l-1][j+l-1-k]) { if(s[i+k][j+k]==s[i+l-1-k][j+k]&&s[i+l-1-k][j+k]==s[i+k][j+l-1-k]&&s[i+k][j+l-1-k]==s[i+l-1-k][j+l-1-k])continue; else { q = 1; break; } } else { q = 1; break; } } else { q = 1; break; } for(int c = k - 1; c > 0; c--) { if(s[i+k][j+c]==s[i+l-1-k][j+c]&&s[i+l-1-k][j+c]==s[i+k][j+l-1-c]&&s[i+k][j+l-1-c]==s[i+l-1-k][j+l-1-c]) { if(s[i+c][j+k]==s[i+l-1-c][j+k]&&s[i+l-1-c][j+k]==s[i+c][j+l-1-k]&&s[i+c][j+l-1-k]==s[i+l-1-c][j+l-1-k]) { continue; } else { q = 1; break; } } else { q = 1; break; } } if(q == 1)break; } if(q == 0)ans = l; } l--; } } } printf("%d\n",ans);}int main(){ int t; scanf("%d",&t); while(t--) { init(); solve(); } return 0;}
- Hdu 4618 Palindrome Sub-Array
- hdu 4618 Palindrome Sub-Array
- HDU 4618 Palindrome Sub-Array
- Hdu 4618 Palindrome Sub-Array
- HDU-4618-Palindrome Sub-Array
- hdu 4618 Palindrome Sub-Array
- HDU 4618 Palindrome Sub-Array
- HDU 4618 Palindrome Sub-Array 解题报告
- hdu 4618——Palindrome Sub-Array
- HDU 4618 Palindrome Sub-Array (HASH + 枚举)
- hdu 4618 Palindrome Sub-Array(dp)
- 2013 多校第二场 hdu 4618 Palindrome Sub-Array
- hdu 4618 Palindrome Sub-Array 多校第二场
- HDU 4618 Palindrome Sub-Array(最大回文子矩阵)
- HDU 4618Palindrome Sub-Array(暴力枚举每一个正方形)
- HDU 4618 Palindrome Sub-Array(Manacher、二分)
- hdu4618 Palindrome Sub-Array
- hdu4618 Palindrome Sub-Array
- Linux 下SElinux以及防火墙的关闭
- Spark随谈(一)—— 总体架构
- 图片热点链接
- 加载web项目时报的错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul
- 进程的三种基本状态及转换原因
- hdu 4618 Palindrome Sub-Array
- 黑马程序员-基础知识梳理5
- La 4287 Proving Equivalences (强连通分量)
- linux下安装swftools和openOffice
- ext4.1 form 相关细节知识点备忘。
- 关于java类方法的学习
- Linux下搭建Android开发环境
- 什么时候需要用到RCC_APB2Periph_AFIO--复用IO时钟的使用
- 基于cocos2d-x引擎的游戏框架设计