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; }
相关文章推荐
- UVA - 10981(dp ,map做内存类,仍没算出最大内存)
- 基础DP - 循环数组最大子段和
- HDU 1024 Max Sum Plus Plus[dp](最大m子段和)
- hdu 1243 反恐训练营(dp 最大公共子序列变形)
- 【POJ 2955】【经典区间DP 递推写法】 Brackets 【合法括号匹配成功结果+2,求最大结果】
- 树上的动态规划;树的最大独立集;刷表DP,子问题彼此独立没有交集; 无根树转化有根树;
- DP之简单的求最大字段和问题
- HDU1081:To The Max(最大子矩阵,线性DP)
- light oj 1031 - Easy Game(区间DP->轮流取值的最大差值)
- 1159Palindrome之求最大子序列dp
- hdu 1003 Max Sum(分而治之||最大连续子序列 dp)
- dp求最大和序列
- NYOJ - 104 最大和【DP】转自:飘过的小牛的博客
- bzoj1084 [SCOI2005]最大子矩阵(dp)
- poj 1505 dp(数列分段,最大段和最小)
- !HDU 1024 Max Sum Plus Plus-dp-(分组dp?最大分段子序列和)
- HDU-1003 Max Sum (线性dp 最大连续和)
- 51Nod - 1043 dp
- URAL_1146/uva_108 最大子矩阵 DP 降维
- hdu 1559 最大子矩阵(DP)