zoukankan      html  css  js  c++  java
  • 51nod 1051 最大子矩阵和(DP)

    题意

    分析
    一道经典的DP题,但是我弱到差点做不出来,真的垃圾
    设置(sum(i,j)代表1-i行第j列的前缀和),然后枚举行i和行j,再枚举列k,做一遍类似一维的最大子段和即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define F(i,a,b) for(int i=a;i<=b;++i)
    #define R(i,a,b) for(int i=a;i<b;++i)
    #define mem(a,b) memset(a,b,sizeof(a))
    
    ll mp[505][505], sum[505][505];
    int m,n;//n行m列
    ll ans,ret;
    
    int main()
    {
        scanf("%d %d",&m,&n);
        F(i,1,n)F(j,1,m) 
        {
            scanf("%I64d",&mp[i][j]);
            sum[i][j]=sum[i-1][j]+mp[i][j];
        }
        ans=0;
        F(j,1,n)F(i,j,n)
        {
            ret=0;
            F(k,1,m)
            {
                if(ret+sum[i][k]-sum[j-1][k]<0) { ret=0;continue; }
                ret+=sum[i][k]-sum[j-1][k];
                ans=max(ans,ret);
                //if(ans==5) cout<<"i="<<i<<"j="<<j<<endl;
            } 
        }
        printf("%I64d
    ",ans );
        return 0;
    }
    
  • 相关阅读:
    解决servlet在web.xml中的路径跳转问题
    浅谈上市公司期权
    spring 与mybatis 整合总结
    学习ssm心得
    django中ORM的事务操作
    Celery快速入门
    vagrant 使用指南
    数据库之mysql
    python之pip
    linux基础
  • 原文地址:https://www.cnblogs.com/chendl111/p/7286756.html
Copyright © 2011-2022 走看看