• hdoj 1081 To The Max


    参考博客:http://blog.csdn.net/acm_davidcn/article/details/5834454

    d[i][j]表示到第i行的所有的同一列的和,3个for循环,时间复杂度O(n^3),表示从第i行到第j行 求从第1列到第n列 连续的最大值。

    ac代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 int d[110][110];
     4 int main()
     5 {
     6     int n,i,j,max,k,sum,t;
     7     while(~scanf("%d",&n))
     8     {
     9         memset(d,0,sizeof(d));
    10 
    11         for(i=1; i<=n; i++)
    12         for(j=1; j<=n; j++)
    13         {
    14             scanf("%d",&d[i][j]);
    15             d[i][j]+=d[i-1][j];
    16         }
    17         max=d[1][1];
    18 
    19         for(i=1; i<=n; i++)
    20         for(j=i; j<=n; j++)
    21         {
    22             sum=0;
    23             for(k=1; k<=n; k++)
    24             {
    25                 t=d[j][k]-d[i-1][k];
    26                 sum+=t;
    27 
    28                 if(sum>=max)
    29                 max=sum;
    30 
    31                if(sum<0)
    32                sum=0;
    33             }
    34         }
    35 
    36         printf("%d\n",max);
    37     }
    38 }

    再贴上我之前自己写的O(n^4)的代码(不知道为么,杭电上对了,sdut上没对)

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 const int INF=-1<<29;
     5 int main()
     6 {
     7     int n,i,j,k,l,d[110][110],a[110],max1,max2,dp[110];
     8     while(~scanf("%d",&n))
     9     {
    10         max2=INF;
    11         for(i=0; i<n; i++)
    12             for(j=0; j<n; j++)
    13                 scanf("%d",&d[i][j]);
    14 
    15         for(i=0; i<n; i++)
    16             for(j=i; j<n; j++)
    17             {
    18                 memset(a,0,sizeof(a));
    19                 memset(dp,0,sizeof(dp));
    20                 for(k=0; k<n; k++)
    21                 {
    22                     for(l=i; l<=j; l++)
    23                     {
    24                         a[k]+=d[l][k];
    25                     }
    26                     if(k==0)
    27                         {dp[0]=a[0]; max1=dp[0];}
    28                     else
    29                     {
    30                         if(dp[k-1]>0)  dp[k]=a[k]+dp[k-1];
    31                         else dp[k]=a[k];
    32                     }
    33                     if(dp[k]>max1)
    34                     max1=dp[k];
    35                 }
    36                 if(max1>max2)
    37                 max2=max1;
    38             }
    39             printf("%d\n",max2);
    40     }
    41 }
  • 相关阅读:
    shell进行mysql统计
    java I/O总结
    Hbase源码分析:Hbase UI中Requests Per Second的具体含义
    ASP.NET Session State Overview
    What is an ISAPI Extension?
    innerxml and outerxml
    postman
    FileZilla文件下载的目录
    how to use webpart container in kentico
    Consider using EXISTS instead of IN
  • 原文地址:https://www.cnblogs.com/bfshm/p/3125071.html
Copyright © 2020-2023  润新知