• hdu 1081 To The Max


    http://acm.hdu.edu.cn/showproblem.php?pid=1081

      题意:在一个有正负数的矩阵当中找一个子矩阵,使得这个子矩阵的sum最大,所谓sum就是子矩阵中所有数字的和。

       思路:刚看到题目的时候觉的像是dp,因为以前做过类似的在矩阵中找最大正方形的题目,觉得是二维dp,又想到对于一个数,如何判断它是否应该存在于一 个矩阵当中,不仅涉及行,还涉及到列,而且还要搞的和最大,因为队友问过我那个hdu的1003题,那个题,我早以前做的时候其实也没理解透,后来又给他 讲了一遍,感觉这个题差不多就是那个的二维版本。

    下面是代码:

    View Code
    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn=105;
    
    int num[maxn][maxn],link[maxn];
    
    int ma,n;
    
    void data_in()
    {
        memset(num,0,sizeof(num));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                scanf("%d",&num[i][j]);
        }
    }
    
    void cal()
    {
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            ans+=link[i];
    
            if(ma<ans) ma=ans;
    
            if(ans<0) ans=0;
        }
    }
    
    void solve()
    {
        ma=-128;
        for(int i=1;i<=n;i++)
        {
            memset(link,0,sizeof(link));
            for(int j=i;j<=n;j++)
            {
                for(int k=1;k<=n;k++)
                    link[k]+=num[j][k];
                cal();
            }
        }
    }
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            data_in();
            solve();
            cal();
            printf("%d\n",ma);
        }
        return 0;
    }

    善待每一天,努力做好自己。

    欢迎转载,注明出处。

  • 相关阅读:
    项目目标文档
    河北省民间组织管理系统项目分析
    《探索需求》读书笔记一
    “花儿日记”项目总结
    2015年秋季个人阅读计划
    场景调研
    “数组最大值求和”结对情况
    课堂改进意见
    《梦断代码》阅读笔记三
    linux io 学习笔记(03)---共享内存,信号灯,消息队列
  • 原文地址:https://www.cnblogs.com/RainingDays/p/3067673.html
Copyright © 2020-2023  润新知