最大和矩阵

最大和矩阵
               最大和和矩阵是最大和子段的推广,是最大和子段推广到二维的形式,当然我们可把二维形再转化成一维的形式,这就是求最大和矩阵方法了!二维转化为一维时我们直接用穷举法!

代码如下:

#include < stdio.h >
int   MaxSum( int  n, int   * a)
{
    
int sum=0,b=0;
    
for(int i=1;i<=n;i++)
    
{
        
if(b>0)
            b
+=a[i];
        
else
            b
=a[i];
        
if(b>sum) sum=b;
    }

    
return sum;
}

int  MaxSum2( int  m, int  n, int  a[][ 100 ])
{
    
int sum=0;
    
int *b=new int [n+1];
    
for(int i=1;i<=m;i++)
    
{
        
for(int k=1;k<=n;k++)
            b[k]
=0;

        
for(int j=i;j<=m;j++)
        
{
            
for(int k=1;k<=n;k++)
            
{
                b[k]
+=a[j][k];
                
int max=MaxSum(n,b);
                
if(max>sum)
                    sum
=max;
            }

        }

    }

    delete b;
    
return sum;
}

int  main()
{
    
int a[100][100],i,j,n,sum,m;
    
while(scanf("%d %d",&m,&n)!=EOF)
    
{
        
for(i=1;i<=m;i++)
            
for(j=1;j<=n;j++)
            
{
                scanf(
"%d",&a[i][j]);
            }

        sum
=MaxSum2(m,n,a);
        printf(
"%d\n",sum);
    }

    
return 0;
}

运行结果如下:
最大和矩阵_第1张图片
      

你可能感兴趣的:(最大和矩阵)