UVA 10074 Take the Land(最大子矩阵和变形)
2013-03-21 11:41
387 查看
题目大意:输入矩阵,找出元素全为0的子矩阵的元素最大和。
解题策略:将0,1转换,动态规划中判断最长子区间和与当前列的大小的关系。
解题策略:将0,1转换,动态规划中判断最长子区间和与当前列的大小的关系。
/* UVA 10074 Take the Land AC by J.Dark ON 2013/3/21 Time 0.020s */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 110; int matrix[maxn][maxn]; int width, height; inline void input(){ for(int i=0; i<width; i++){ for(int j=0; j<height; j++){ cin >> matrix[i][j]; // 0,1互换 matrix[i][j] = 1-matrix[i][j]; } } } int max_sum(int *b, int *matrix, int len_colu){ int C_sum = 0; //当前列最大子区间和 int temp = 0; for(int i=0; i<height; i++) b[i] += matrix[i]; //当前第i-j行,长度为1~j-i+1的“条”的长度 //依次枚举i-j行间,长度从1~j-i+1的“条” for(int i=0; i<height; i++){ if(b[i] < len_colu){ //出现“1”不连续情况则抛弃 temp = 0; continue; } temp += b[i]; if(temp > C_sum) C_sum = temp; } return C_sum; } void solve(){ int maxSum = 0, b[maxn]; int temp = 0; for(int i=0; i<width; i++){ memset(b, 0, sizeof(b)); for(int j=i; j<width; j++){ //枚举第i行~第j行的 满足题意的子矩阵元素数,取最大 temp = max_sum(b, matrix[j], j-i+1); maxSum = max(maxSum, temp); } } cout << maxSum << endl; } /////////////////////////////////////////////////////////////// int main(){ while(cin >> width >> height && (width || height)) { input(); solve(); } //system("pause"); return 0; }
相关文章推荐
- Take the Land - UVa 10074 变形最大子矩阵和
- UVa 10074 Take the Land (转化思想&最大子矩阵和)
- UVa 10074 - Take the Land
- uva 10074 Take the Land
- UVa:10074 Take the Land
- UVa 10074 - Take the Land
- UVA_10074_Take the Land
- UVa 10074 - Take the Land
- UVA 1324 The Largest Clique 最大团(强连通分量,变形)
- hdu - To The Max-1081 - 最大子矩阵 - 最大连续子序列和变形/动态规划
- UVA-10074 最大子矩阵 DP
- UVA 10092 The Problem with the Problemsetter【二分图最大匹配变形 邻接矩阵实现最大匹配算法】
- UVA - 10499 The Land of Justice
- UVa 10499 - The Land of Justice
- [POJ1050]To the Max(最大子矩阵,DP)
- UVa 10766 Organising the Organisation(矩阵树定理)
- pku1050----To the Max(求矩阵的最大子段和)
- UVa 836 - Largest Submatrix ( 最大01矩阵)
- UVa 10499 - The Land of Justice
- poj 1050 To the Max 二维矩阵转换一维求子序列最大值