UVA_10074_Take the Land
#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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.