码迷,mamicode.com
首页 > 其他好文 > 详细

最大子矩阵(贪心)

时间:2020-02-17 00:57:29      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:博客   cout   div   str   using   +=   mes   color   int   

虽然我写的是贪心

但这个题哪有贪心的感觉

感觉无从可贪

折磨了我好久之后

我从一篇别人的博客上

受到了启发

类似几何的割补法

将矩阵的行的和算出来

然后再作差比较

得出一块矩阵

在比较之前算出的矩阵权值

看是否大于零,大于零就添上,小于零就舍去

然后进行枚举

然后这个题的核心就差不多了

#include<iostream>
#include<cstdio>
using namespace std;
int N[105][105];
int maxn=-1e3;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            {
                cin>>N[i][j];
                N[i][j]+=N[i-1][j];
            }
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            {
                    int ans=0;
                    for(int l=1;l<=n;l++)
                        {
                            ans=N[j][l]-N[i-1][l]+max(0,ans);
                            maxn=max(ans,maxn);
                        }
            }
    cout<<maxn;
}

一个细节务必务必务必记得——

maxn初值不能为零,不能为零,不能为零

(就因为这个,几次都没过)

 

最大子矩阵(贪心)

标签:博客   cout   div   str   using   +=   mes   color   int   

原文地址:https://www.cnblogs.com/-Iris-/p/12319588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!