0
点赞
收藏
分享

微信扫一扫

最大子矩阵和

Aliven888 2022-01-12 阅读 62
c++
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1000;
int a[maxn];
int b[maxn];
int aa[maxn][maxn];
int bb[maxn][maxn];

int maxse(int n)
{
    int c=-100;
    for (int i=0;i<n;i++)
    {
        if (i==0) {b[i]=a[0];}
        else
        {
            b[i]=max(b[i-1]+a[i],a[i]);
        }
        c=max(c,b[i]);
    }
    return c;
}

int income(int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&aa[i][j]);
        }
    }
    
        for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(i==0){bb[i][j]=aa[0][j];}
            else
            {
                bb[i][j]=bb[i-1][j]+aa[i][j];
            }
        }
    }
}

int maxsese(int n)
{
    int d=-100;
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            for(int k=0;k<n;k++)
            {
                if(i==0){a[k]=bb[0][k];}
                else
                {
                    a[k]=bb[j][k]-bb[i-1][k];
                }
            }
            d=max(maxse(n),d);
        }
    }
    return d;   
}


int main()
{
    int n,e;
    scanf("%d",&n);
    income(n);
    e=maxsese(n);
    printf("%d",e);
    return 0;
}
举报

相关推荐

0 条评论