zoukankan      html  css  js  c++  java
  • POJ ---1050 To the Max

    To the Max
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 38914   Accepted: 20534

    Description

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*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 * 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<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int map[105][105], sum[105][105];
     6 int main(){
     7     int n, maxn;
     8     /* freopen("in.c", "r", stdin); */
     9     while(~scanf("%d", &n)){
    10         for(int i = 1;i <=n;i ++){
    11             for(int j = 1;j <= n;j ++){
    12                 scanf("%d", &map[i][j]);
    13                 sum[i][j] = sum[i-1][j] + sum[i][j-1] + map[i][j] - sum[i-1][j-1];
    14             }
    15         }
    16         maxn = -100000000;
    17         for(int i = 1;i <= n;i ++){
    18             for(int j = 1;j <= n;j ++){
    19                 for(int k = i+1;k <= n;k ++){
    20                     for(int p = j+1;p <= n;p ++)
    21                         maxn = max(sum[k][p]-sum[k][j-1]-sum[i-1][p] + sum[i-1][j-1], maxn);
    22                 }
    23             }
    24         }
    25         printf("%d
    ", maxn);
    26     }
    27     return 0;
    28 }
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3618714.html
Copyright © 2011-2022 走看看