求二维数组最大子数组合

#include<iostream>

using namespace std;
void main ()
{
     int x,y,i,j,m=0,A[100][100];
 
     cout<< "输入矩阵的行()和列" ;
     cin>>x>>y;
     if (x>100||y>100)
     {
         cout<< "请重新输入:" ;
         cin>>x>>y;
     }
     for (i=0;i<x;i++)
     {
         for (j=0;j<y;j++)
         {
             cin>>A[i][j];
         }
 
     }
     int sum[100]={0},max=0,result=A[0][0];
 
     for (i=0;i<x;i++) //确定子数组的最大上界(为第i行)
     {
         while (m+i<x) //确定子数组有m+i行
         {
             //把子数组当成一位数组一样,求最大子数组的和
             for (j=0;j<y;j++)
             {
                 sum[j]=sum[j]+A[m+i][j];
 
             }
             max=0;
             for (j=0;j<y;j++)
             {
                 if (max+sum[j]>sum[j])
                 {
                     max=max+sum[j];
                 }
                 else
                 {
                     max=sum[j];
                 }
                 if (max>result)
                 {
                     result=max;
                 }
             }
             m++; //是子数组的行数+1
         }
         //初始化m和sum[]的值,使子数组最大上界下降1,之后重新循环。
         m=0;
         for (j=0;j<y;j++)
         {
             sum[j]=0;
         }
 
     }
 
     cout<<result;
}

 

 

转载于:https://www.cnblogs.com/wmq123/p/9825718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值