Matrix Swapping II
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1260 Accepted Submission(s): 839
We can swap any two columns any times, and we are to make the goodness of the matrix as large as possible.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Max 1005
using namespace std;
char matrix[Max][Max];
bool cmp(int a,int b)
{return a>b;}
int main()
{
int m,n,i,j,h[Max],sum[Max],ans;
while(~scanf("%d%d",&m,&n))
{
ans=0;
memset(matrix,0,sizeof(matrix));
memset(h,0,sizeof(h));
memset(sum,0,sizeof(sum));
getchar();
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%c",&matrix[i][j]);
h[j]=matrix[i][j]=='0'?0:h[j]+1;
sum[j]=h[j];
}
getchar();
sort(sum+1,sum+1+n,cmp);
for(j=1;j<=n;j++)
ans=max(ans,sum[j]*j);
//cout<<ans<<endl;
}
printf("%d\n",ans);
}
return 0;
}