周泊辰和张子涵返回二维数组整数组和

Posted chenvc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了周泊辰和张子涵返回二维数组整数组和相关的知识,希望对你有一定的参考价值。

首先了解一维数组的求最大和,可以先列举出一维数组的所有子数组并求出他们的和,即加上一个正的和会增加,反之减少,如果某一个和为负数,那么就应该放弃他,然后清零。然后求二维数组最大子数组的和,可以转化为求一维数组最大子数组的和
设一个二维数组a[n][m],找它的 最大子数组之和,先建立一个新的二维数组b[n][m],二维数组b[j][k] 存放的是a[j][k](0<=j2.循环:从a[0][0]开始 以此是 a[0][1]、 a[0][2]……a[0][m]、a[1][0]、 a[1][1]……a[1][m]、a[2][0]、 a[2][1]……a[2][m]、……a[n][0]、 a[n][1]……a[n][m],当循环到a[j][k](0<=j计算方法:根据b[j-1][k]、b[j][k-1]、b[j-1][k-1]的正负情况,来计算b[j][k],根据包含a[j][k]的各种矩阵情况,求得最大值,最后求出b[m][n]中的最大值。

int a[102][102];
int maxSubArray(int *arr, int len)      
{
 int i,sum=arr[0],b=0;
 for(i=0;i<len;++i)
 {
  if(b>0)
   b+=arr[i];
  else
   b=arr[i];
  if(b>sum)
   sum=b;
 }
 return sum;
}
int maxSubMatrix(int n, int m,int array[102][102])
{
 int i,j,h,max,sum=-100000;
 int b[102];
 for(i=0;i<n;i++)
 {
  memset(b,0,sizeof(b));     
  for(j=i;j<n;j++)            
  {
   for(h=0;h<m;h++)
   {
    b[h]+=array[j][h];   
   }
   max=maxSubArray(b,h);
   if(max>sum)
    sum=max;
  }
 }
 return sum;
}
int main(void)
{
 int n,i,j;
 while(scanf("%d",&n)!=EOF)
 {
  for(i=0;i<n;i++)
  {
   for(j=0;j<n;j++)
    scanf("%d",&a[i][j]);
  }
  printf("%d ",maxSubMatrix(n,n,a));
 }
 return 0;
}
小队成员 周泊辰 张子涵技术分享图片
















































以上是关于周泊辰和张子涵返回二维数组整数组和的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维数整数组中最大子数组的和

返回一个二维整数组中最大子数组的和

使用二分法查询二维整型数组的值(找到返回其坐标)

返回一个二维整数数组中最大子数组的和(二人结对)

数组问题求二维整型数组最大联通子数组的和

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