UVA_10074_Take the Land

来源:互联网 发布:淘宝客如何打造爆款 编辑:程序博客网 时间:2024/05/29 15:47
#include<iostream>      #include<sstream>      #include<string>      #include<vector>      #include<list>      #include<set>      #include<map>      #include<stack>      #include<queue>      #include<algorithm>      #include<cmath>      #pragma warning(disable:4996)      using std::cin;using std::cout;using std::endl;using std::stringstream;using std::string;using std::vector;using std::list;using std::pair;using std::set;using std::multiset;using std::map;using std::multimap;using std::stack;using std::queue;int process_row(const vector<vector<bool>>&matrix,const int &n,const int &m){int area = 0;for (int i = 0; i < n; i++)//压缩区间上界{for (int j = i; j < n; j++)//压缩区间下界{vector<pair<bool, int>>dp(m);for (int row = i; row <= j; row++){for (int column = 0; column < m; column++){if (matrix[row][column]){dp[column].first = true;}}}int maximum = 0;if (!dp[0].first){dp[0].second++;maximum = 1;}for (int k = 1; k < m; k++){if (!dp[k].first){if (dp[k - 1].first){dp[k].second++;}if (!dp[k - 1].first){dp[k].second = dp[k - 1].second + 1;maximum = std::max(maximum, dp[k].second);}}}area = std::max(area, maximum*(j - i + 1));}}return area;}int process_column(const vector<vector<bool>>&matrix, const int &n, const int &m){int area = 0;for (int i = 0; i < n; i++)//压缩区间上界{for (int j = i; j < n; j++)//压缩区间下界{vector<pair<bool, int>>dp(m);for (int column = i; column <= j; column++){for (int row = 0; row < m; row++){if (matrix[row][column]){dp[row].first = true;}}}int maximum = 0;if (!dp[0].first){dp[0].second++;maximum = 1;}for (int k = 1; k < m; k++){if (!dp[k].first){if (dp[k - 1].first){dp[k].second++;}if (!dp[k - 1].first){dp[k].second = dp[k - 1].second + 1;}maximum = std::max(maximum, dp[k].second);}}area = std::max(area, maximum*(j - i + 1));}}return area;}int main(){//freopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);int n,m; while (cin>>n>>m&&n&&m){vector<vector<bool>>matrix(n, (vector<bool>)m);for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){short isTree; cin >> isTree;if (isTree){matrix[i][j]=true;}}}int area = 0;area = std::max(area, process_row(matrix, n, m));area = std::max(area, process_column(matrix, m, n));cout << area << endl;}return 0;}

0 0
原创粉丝点击