题意:给你一个矩阵,问你只变动行,能到到最大面积的全为‘1’ 的矩阵。
解题思路:先一行一行的求出到了这一列最长连续的1有多少,然后一列一列先hash 然后求 最大值 ,发现%1d好慢。
解题代码:
1 // File Name: 375b.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月09日 星期一 21时05分00秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 #define maxn 5005 26 using namespace std; 27 int dp[maxn][maxn]; 28 int hs[maxn]; 29 int main(){ 30 int n , m; 31 scanf("%d %d",&n,&m); 32 getchar(); 33 for(int i = 1;i <= n;i ++) 34 { 35 int sum = 0 ; 36 char tmp ; 37 for(int j = 1;j <= m ;j++ ) 38 { 39 tmp = getchar(); 40 if(tmp == ‘1‘ ) 41 sum ++ ; 42 else sum = 0; 43 dp[i][j] = sum ; 44 } 45 getchar(); 46 } 47 int mx = 0 ; 48 for(int i = 1;i <= m;i ++) 49 { 50 memset(hs,0,sizeof(hs)); 51 for(int j= 1;j <= n;j ++) 52 { 53 hs[dp[j][i]] ++; 54 } 55 int tsum = 0 ; 56 for(int j = 0;j<= m;j ++) 57 { 58 if(hs[j]) 59 { 60 mx = max((n - tsum ) * j ,mx); 61 tsum += hs[j]; 62 } 63 } 64 } 65 printf("%d\n",mx); 66 67 return 0; 68 }
时间: 2024-10-26 06:57:39