您的位置:首页 > 其它

dp专题 第二题 最大子矩阵

2017-04-05 22:27 162 查看
 1、简单描述

输入一个n*n的矩阵,输出最大的子矩阵之和

2、简单思路

#include<bits/stdc++.h>

using namespace std;

int fun(int b[101],int n)

{

    int i,Max,c;

    c=0;

    Max=0;

    for(i=1;i<=n;i++)

    {

        if(c>0)

            c+=b[i];

        else c=b[i];

        if(Max<c)

            Max=c;

    }

    return Max;

}                                                                                            //最大子序列和

int main()

{

    int i,j,Max,sum,k,n;

    int a[101][101],b[101];

    cin>>n;

    for(i=1;i<=n;i++)

    for(j=1;j<=n;j++)

    cin>>a[i][j];

    Max=0;

    for(i=1;i<=n;i++)

    {

        for(j=1;j<=n;j++)

            b[j]=0;

        for(j=i;j<=n;j++)

        {

            for(k=1;k<=n;k++)

                b[k]+=a[j][k];

            sum=fun(b,n);

            if(Max<sum)

                Max=sum;

        }

    }                                                                                        //压缩成一维数组

    cout<<Max<<endl;

    return 0;

}

将矩阵的每一列不同行的元素遍历相加,然后成为了一行元素,转化为求最大子段和问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: