行可以交换
dp[i][j]:弟ij个上面有几个1
然后排序,,最大的dp[i][j]*1,dp[i][j-1]*2.......
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char map[1002][1002];
int dp[1010][1010];
int cmp(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int main()
{
int i,j,n,m,max;
while(scanf("%d%d",&n,&m)!=-1)
{
for(i=0;i<n;i++)
scanf("%s",map[i]);
for(i=0;i<m;i++)
dp[0][i]=map[0][i]-'0';
for(i=1;i<n;i++)
for(j=0;j<m;j++)
{
if(map[i][j]=='0')
dp[i][j]=0;
else dp[i][j]=dp[i-1][j]+1;
}
max=0;
for(i=0;i<n;i++)
{
qsort(dp[i],m,sizeof(dp[i][0]),cmp);
for(j=0;j<m;j++)
{
if(max<dp[i][j]*(j+1))
max=dp[i][j]*(j+1);
}
}
printf("%d\n",max);
}
return 0;
}