zoukankan      html  css  js  c++  java
  • 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;
    }

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

    欢迎转载,注明出处。

  • 相关阅读:
    c#基础之集合
    找出子字符串在字符串中的所有索引
    c# 排序
    C#基础之枚举
    验证用户名不为空并且不存在
    验证用户名和密码,输入三次不正确就锁定账号
    c#基础
    linux使用
    python之logging模块
    手写MyBatis,纯手工打造开源框架(第三篇:运筹帷幄)
  • 原文地址:https://www.cnblogs.com/RainingDays/p/3067673.html
Copyright © 2011-2022 走看看