首页 > 其他 > 详细

zoj1074 To the Max

时间:2015-10-13 22:55:49      阅读:324      评论:0      收藏:0      [点我收藏+]

题目很简单,求一个连续的最大子矩阵的值.

zoj上的数据非常弱。

首先爆搜是O(N^4),10^8的复杂度略高,那么我们可以处理一下其中一维的前缀和,降一阶,然后按照连续最大子序列来处理,因为可能为负数,所以基数不能取0.

上代码

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<iostream>
#include<cstring>
using namespace std;
int n;
int a[105][105];
int dp[105];
int main()
{
    int t;
   //freopen("input.txt","r",stdin);
   scanf("%d",&n);
   for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
   {
    scanf("%d",&t);
    a[i][j]=a[i][j-1]+t;
   }//每一行的前缀和
   int res=-1280000;
   for(int i=0;i<=n;i++)
     for(int j=i+1;j<=n;j++)
   {
       memset(dp,0,sizeof(dp));
       for(int k=1;k<=n;k++)
       {
           int t=a[k][j]-a[k][i];
           if(dp[k-1]<0)
            dp[k]=t;
        else
            dp[k]=dp[k-1]+t;
            if(dp[k]>res)
            res=dp[k];
       }
   }
   printf("%d\n",res);
}

zoj1074 To the Max

原文:http://www.cnblogs.com/acliang/p/4876046.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!