uvaLA 3029 最大子矩阵(DP)
2014-05-28 14:22
239 查看
参见最大子矩阵的论文
注意读入数据的地方
AC代码如下:
注意读入数据的地方
AC代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int maps[1100][1100]; int N, M; int high[1100][1100], lf[1100][1100], rt[1100][1100]; int main(){ int T, ans; char c; scanf( "%d", &T ); while( T-- ){ scanf( "%d%d", &N, &M ); memset( maps, 0, sizeof( maps ) ); for( int i = 1; i <= N; i++ ){ for( int j = 1; j <= M; j++ ){ while( 1 ){ c = getchar(); if( c == 'R' ){ maps[i][j] = 0; break; }else if( c == 'F' ){ maps[i][j] = 1; break; } } } } ans = 0; memset( high, 0, sizeof( high ) ); for( int i = 1; i <= N; i++ ){ lf[i][0] = 0; for( int j = 1; j <= M; j++ ){ if( maps[i][j] ){ lf[i][j] = lf[i][j-1] + 1; }else{ lf[i][j] = 0; } } rt[i][M+1] = 0; for( int j = M; j >= 1; j-- ){ if( maps[i][j] ){ rt[i][j] = rt[i][j+1] + 1; }else{ rt[i][j] = 0; } } for( int j = 1; j <= M; j++ ){ if( maps[i][j] == 0 ){ high[i][j] = 0; continue; }else if( maps[i-1][j] == 0 ){ high[i][j] = 1; ans = max( ans, lf[i][j] + rt[i][j] - 1 ); }else{ high[i][j] = high[i-1][j] + 1; lf[i][j] = min( lf[i-1][j], lf[i][j] ); rt[i][j] = min( rt[i-1][j], rt[i][j] ); ans = max( ans, ( lf[i][j] + rt[i][j] - 1 ) * high[i][j] ); } } } printf( "%d\n", ans * 3 ); } return 0; }
相关文章推荐
- UvaLA 3029 最大子矩阵问题
- POJ 1050 To the Max (线性dp 最大子矩阵)
- hdu 1559 最大子矩阵(DP)
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
- 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- HDU 1081 最大子矩阵(LCS_DP+前缀和)
- dp之最大和,m段最大和以及最大子矩阵
- [DP] bzoj1084: [SCOI2005]最大子矩阵
- ZOJ1074 (最大和子矩阵 DP)
- BZOJ 1084: [SCOI2005]最大子矩阵( dp )
- 51nod-dp入门-最大子矩阵和
- HDU 2830 Matrix Swapping II(dp最大子矩阵和)
- #HDU 1506 dp求最大子矩阵
- HDU 1559 最大子矩阵 (二维DP)
- 求最大子矩阵(子矩阵无大小要求)dp
- HDOJ 题目1559 最大子矩阵(dp)
- 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
- hdu 1559 最大子矩阵 (简单dp)
- poj1050(dp最大子矩阵)