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

本文介绍了一种使用C++编程语言解决矩阵中寻找最大子矩阵和问题的方法。通过动态规划思想,该算法能有效地遍历并计算矩阵中所有可能的子矩阵的和,最终找到具有最大和的子矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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/L20160909/p/9885461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值