求二维数组子数组的最大和

求二维数组中各个矩阵和的最大值一种方法是穷举法;

采用for循环列举出所有子矩阵的和,求出最大值:

#include<iostream>

using namespace std;

int max()

{

 int n=3,m=3;  //n、m可随意取值,但数组越大,程序反应越慢

int a[3][3]={1,2,2,4,5,-1,3,41,-6};    

int b=0;    

int h=0;    

int f=0;    

for(int i=0;i<n;i++)

 {   

       for(int j=0;j<m;j++)   

       {          int x=a[i][j];    int y=i+1;    int k=j+1;

                   if(x>b)     {      b=x;     }

                   while(k<m||y<n)   

                       {          

                          if(y<n)     

                              y++;   

                          if(k<m)     

                              k++;     

                            for(int u=i;u<y;u++)    

                           {       for(int v=j;v<k;v++)      

                                    {       h=h+a[u][v];       }       

                                 if(h>b)      

                                   b=h;    

                           }

                           for(int o=j;o<k;o++)   

                          {       for(int p=i;p<y;p++)      

                                   {       f=f+a[p][o];       }     

                               if(f>b)     

                                  b=f;     

                         }         

                          h=0;    

                         f=0;   

                  } //while  

         }

  }    

             return b;

}

int main()

{    

           int b=max();    

           cout<<b<<endl;    

           return 0;

}

原文地址:https://www.cnblogs.com/lpjdbk/p/3611846.html