• 最大子矩阵(贪心)


    虽然我写的是贪心

    但这个题哪有贪心的感觉

    感觉无从可贪

    折磨了我好久之后

    我从一篇别人的博客上

    受到了启发

    类似几何的割补法

    将矩阵的行的和算出来

    然后再作差比较

    得出一块矩阵

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

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

    然后进行枚举

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

    #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初值不能为零,不能为零,不能为零

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

  • 相关阅读:
    软件工程——股票利润
    软件工程——爬楼梯
    总结
    团队4
    团队答辩
    团队3
    软工2
    团队合作(1)
    软件工程第二次作业
    软件工程第一次作业(2)
  • 原文地址:https://www.cnblogs.com/-Iris-/p/12319588.html
Copyright © 2020-2023  润新知