最大子矩阵和问题

最大子矩阵和问题。给定m行n列的整数矩阵A,求矩阵A的一个子矩阵,使其元素之和最大。

输入格式:

第一行输入矩阵行数m和列数n(1≤m≤100,1≤n≤100),再依次输入m×n个整数。

输出格式:

输出第一行为最大子矩阵各元素之和,第二行为子矩阵在整个矩阵中行序号范围与列序号范围。

输入样例1:

5 6
60 3 -65 -92 32 -70
-41 14 -38 54 2 29
69 88 54 -77 -46 -49
97 -32 44 29 60 64
49 -48 -96 59 -52 25

结尾无空行

输出样例1:

输出第一行321表示子矩阵各元素之和,输出第二行2 4 1 6表示子矩阵的行序号从2到4,列序号从1到6

321
2 4 1 6

结尾无空行

#include<stdio.h>
#include<stdlib.h>

int maxsum(int n,int a[],int &l1,int &l2){
    int b=0,max=0;
    l1=0;
    for(int i=0;i<n;i++)
    {
        if(b>0)b+=a[i];
        else {b=a[i];l1=i;}
        if(b>max){max=b;l2=i;}
    }

    return max;
}

int  main(){

    int n,m,a[101][101],b[101]={0},c[101]={0},h1=0,h2=0,l1=0,l2=0,max=0;
    scanf("%d%d",&m,&n);
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for(int i=0;i<m;i++)
    {
        for(int k=0;k<n;k++)
                c[k]=0;
        for(int j=i;j<m;j++){
            for(int k=0;k<n;k++)
                c[k]+=a[j][k];
            int x,y;
            b[j]=maxsum(n,c,x,y);
            if(b[j]>max){
                max=b[j];
                l1=x+1;l2=y+1;
                h1=i+1;
                h2=j+1;
            }
        }

    }

    printf("%d\n",max);
    printf("%d %d %d %d",h1,h2,l1,l2);







    system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值