您的位置:首页 > 其它

FAFU-1043 最大和谐子方阵 DP

2014-02-26 19:36 232 查看
题目链接

#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 10005;
const int inf = 1<<30;
int n,m,len,num;
int map[3][maxn],dp[3][maxn];  //滚动数组
int min( int a,int b,int c )
{
a = a<b?a:b;
return a<c?a:c;
}
void getDP()
{
int row = 0;
len = -inf;
memset( dp,0,sizeof(dp) );
map[0][0] = -1;
for( int i = 1; i <= n; i ++ ){
row = 1-row;
for( int j = 1; j <= m; j ++ ){
scanf("%d",&map[row][j]);
if( map[row][j] == map[1-row][j] && map[row][j] == map[row][j-1] && map[row][j] == map[1-row][j-1] )
dp[row][j] = min( dp[row][j-1],dp[1-row][j],dp[1-row][j-1] ) + 1;
else
dp[row][j] = 1;
if( len < dp[row][j] ){
len = dp[row][j];
num = map[row][j];
}
else if( len == dp[row][j] )
num = num<map[row][j]?num:map[row][j];
}
}
}
int main()
{
freopen("data.txt","r",stdin);
int t;
scanf("%d",&t);
while( t -- ){
scanf("%d%d",&n,&m);
getDP();
printf("%d %d\n",len,num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: