zoukankan      html  css  js  c++  java
  • HDU 1081

    To The Max

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 5027 Accepted Submission(s): 2388


    Problem Description
    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle.

    As an example, the maximal sub-rectangle of the array:

    0 -2 -7 0
    9 2 -6 2
    -4 1 -4 1
    -1 8 0 -2

    is in the lower left corner:

    9 2
    -4 1
    -1 8

    and has a sum of 15.
     
    Input
    The input consists of an N x N array of integers. The input begins with a single positive integer N on a line by itself, indicating the size of the square two-dimensional array. This is followed by N 2 integers separated by whitespace (spaces and newlines). These are the N 2 integers of the array, presented in row-major order. That is, all numbers in the first row, left to right, then all numbers in the second row, left to right, etc. N may be as large as 100. The numbers in the array will be in the range [-127,127].
     
    Output
    Output the sum of the maximal sub-rectangle.
     
    Sample Input
    4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
     
    Sample Output
    15
     1 #include<stdio.h>
     2 #include<string.h>
     3 int a[101][101],b[101];
     4 int subsequencesum(int a[],int n)
     5 {
     6     int sum=0,maxsum=-0x7fffff,i;
     7     for(i=1;i<=n;i++)
     8         if(maxsum<a[i])
     9             maxsum=a[i];
    10     if(maxsum<=0)
    11         return maxsum;
    12     for(i=0;i<n;i++)
    13     {
    14         sum+=a[i+1];
    15         if(sum>maxsum)
    16             maxsum=sum;   
    17         else
    18             if(sum<0)
    19                 sum=0;
    20     }
    21     return maxsum;
    22 }                     
    23 int main()
    24 {
    25          int n,max,ans,temp;
    26         int i,j,k,T,m;
    27          while(~scanf("%d",&n))//说的是一组,实际却是多组 
    28          {
    29             temp=ans=max=-0x7fffff;
    30             for(i=1;i<=n;i++)
    31                 for(j=1;j<=n;j++)
    32                     scanf("%d",&a[i][j]);
    33             for(i=1;i<=n;i++)
    34             {                         
    35                     memset(b,0,sizeof(b));
    36                     for(j=i;j<=n;j++)
    37                     {
    38                              for(k=1;k<=n;k++)
    39                             {
    40                                 b[k]+=a[j][k];
    41                             }
    42                             ans=subsequencesum(b,n);//按行枚举 ,猜测按列枚举时间差不多, 
    43                             if(temp<ans) 
    44                                 temp=ans;
    45                     }
    46             }
    47             printf("%d\n",temp);
    48         }
    49         //while(1);
    50         return 0;
    51 }            
    52         
    53         
  • 相关阅读:
    【消息队列MQ】各类MQ比较
    MySql查询功能梳理
    头条日常实习生面经 2018.11.28
    排序算法 JavaScript
    浅谈二分查找 JavaScript
    LeetCode17.电话号码的字母组合 JavaScript
    LeetCode16.最接近的三数之和 JavaScript
    LeetCode15.三数之和 JavaScript
    LeetCode14.最长公共前缀 JavaScript
    LeetCode13.罗马数字转整数 JavaScript
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2662931.html
Copyright © 2011-2022 走看看