最大子阵

 1 #include <iostream>
 2 #include <cstring>
 3 int maxSubArray(int* a,int n)//一维数组的最大和
 4 {
 5     if(!a||n<=0)
 6         return 0;
 7     int curmax=0,max=0;
 8     max=curmax=a[0];
 9     for(int i=1;i<n;i++)
10     {
11         if(curmax>=0)
12         {
13             curmax+=a[i];
14         }
15         else 
16             curmax=a[i];
17         if(curmax>max)
18             max=curmax;
19     }
20     return max;
21  } 
22 
23  int maxSumInMatrix(int a[200][200],int n)
24  {
25      int i=0,j=0,k=0;
26      int sumij[200]={0};//从i到j的每一列的和
27 
28      int max_n=a[0][0],max=a[0][0];
29 
30      for(i=0;i<n;i++)
31      {
32          memset(sumij,0,sizeof(sumij));//clear,每次移动i的时候清除
33          for(j=i;j<n;j++)
34          {
35 
36              for(k=0;k<n;k++)
37              {
38                  sumij[k]+=a[j][k];
39              }
40              max_n=maxSubArray(sumij,n);
41              if(max_n>max)//检查并更新最大值
42              max=max_n;
43          }         
44      }
45      return max;
46 }
47 
48  int main()
49  {
50      int a[200][200];
51      memset(a,0,sizeof(a));
52      int n;
53      std::cin>>n;
54      for(int i=0;i<n;i++)
55      {
56          for(int j=0;j<n;j++)
57          std::cin>>a[i][j];
58      }
59      std::cout<<maxSumInMatrix(a,n);
60  }
61 
62 
原文地址:https://www.cnblogs.com/hcd-dyh/p/8680970.html