题意:给你一个矩阵,里面的数字只有0和1两种,其中,列可以任意移动。问如何移动可以使某个子矩阵中元素全部是1,求出这个最大子矩阵的面积。
思路:由于列可以任意移动,那么显然把高度大的都放到一堆里面是最优的,那么排个序就可以像HDU1506那样做了
#include<bits\stdc++.h>
using namespace std;
const int maxn = 2005;
char mp[maxn][maxn];
int h[maxn];
int hh[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int ans = 0;
// getchar();
for(int i = 1;i<=n;i++)
{
// memset(h,0,sizeof(h));
for(int j = 1;j<=m;j++)
{
scanf(" %c",&mp[i][j]);
if(mp[i][j]=='1')
h[j]++;
else
h[j]=0;
hh[j]=h[j];
}
sort(hh+1,hh+1+m,cmp);
for (int j = 1;j<=m;j++)
ans = max(ans,hh[j]*j);
// getchar();
}
printf("%d\n",ans);
}
}