hdu 2830 Matrix Swapping II

来源:互联网 发布:云梯 for mac 编辑:程序博客网 时间:2024/04/30 10:12

行可以交换

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;}