HDU 2830 Matrix Swapping II 动态规划

HDU 2830 Matrix Swapping II 动态规划

这题需要动动脑子,可以找到O(NM)的算法。
但是表述很麻烦,还是看代码吧。。

#include  < stdio.h >
#include 
< string .h >

int  N, M;
int  end[ 1024 ], sum[ 1024 ];
char  mat[ 1024 ][ 1024 ];

int  main()
{
    
int i, j, k, v, ans;

    
while (scanf("%d%d"&N, &M) != EOF) {
        memset(end, 
0sizeof(end));
        memset(sum, 
0sizeof(sum));
        
for (i = 0; i < N; i++)
            scanf(
"%s", mat[i]);
        ans 
= 0;
        
for (i = 0; i < N; i++{
            
for (j = 0; j < M; j++{
                
if (mat[i][j] == '1' && end[j] <= i) {
                    
for (k = i; k < N && mat[k][j] == '1'; k++)
                        sum[k]
++;
                    end[j] 
= k;
                }

            }

            
for (j = i; j < N && sum[j]; j++{
                v 
= (j - i + 1* sum[j];
                
if (v > ans) 
                    ans 
= v;
            }

        }

        printf(
"%d\n", ans);
    }


    
return 0;
}

你可能感兴趣的:(HDU 2830 Matrix Swapping II 动态规划)