zoukankan      html  css  js  c++  java
  • UVa 108

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=44

     Maximum Sum 

    Background

    A problem that is simple to solve in one dimension is often much more difficult to solve in more than one dimension. Consider satisfying a boolean expression in conjunctive normal form in which each conjunct consists of exactly 3 disjuncts. This problem (3-SAT) is NP-complete. The problem 2-SAT is solved quite efficiently, however. In contrast, some problems belong to the same complexity class regardless of the dimensionality of the problem.

    The Problem

    Given a 2-dimensional array of positive and negative integers, find the sub-rectangle with the largest sum. 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. A sub-rectangle is any contiguous sub-array of size tex2html_wrap_inline33 or greater located within the whole array. As an example, the maximal sub-rectangle of the array:

    displaymath35

    is in the lower-left-hand corner:

    displaymath37

    and has the sum of 15.

    Input and Output

    The input consists of an tex2html_wrap_inline39 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 tex2html_wrap_inline43 integers separated by white-space (newlines and spaces). These tex2html_wrap_inline43integers make up the array in row-major order (i.e., all numbers on the first row, left-to-right, then all numbers on 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].

    The output is 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

    解题思路:

    题意:给出n*n的矩阵,求出里面子矩阵的和的最大值。

    最大连续子序列的应用,序列是一维的,矩阵是二维的,所以我们可以把矩阵转换为一维的来算。

    也就是枚举矩阵的连续几行的合并,这样就转换为一维的了,再用最大子序列的算法去求,更新最大值就可以了。

    代码:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int table[100][100];
     6 int sum[100];
     7 int N;
     8 
     9 int max_continuous_sum()
    10 {
    11     int maxs=0,s=0;
    12     for(int i=0; i<N; i++)
    13     {
    14         if(s>=0) s+=sum[i];
    15         else s=sum[i];
    16         maxs = maxs>s ? maxs : s;
    17     }
    18     return maxs;
    19 }
    20 int main()
    21 {
    22     cin >> N;
    23     int maxsum=0;
    24     int tmp;
    25     for(int i=0; i<N; i++)
    26     {
    27         for(int j=0; j<N; j++)
    28         {
    29             cin >> table[i][j];
    30             sum[j]=table[i][j];
    31         }
    32         tmp = max_continuous_sum();
    33         maxsum = maxsum>tmp ? maxsum : tmp;
    34         for(int j=i-1; j>=0; j--)
    35         {
    36             for(int k=0; k<N; k++)
    37                 sum[k]+=table[j][k];
    38             tmp = max_continuous_sum();
    39             maxsum = maxsum>tmp ? maxsum : tmp;
    40         }
    41     }
    42     cout << maxsum << endl;
    43     return 0;
    44 }
  • 相关阅读:
    【转载】浏览器兼容性测试
    【转载】移动端
    【转载】Postman学习之【压力测试】
    【转载】如何进行bug总结
    【转载】按键精灵对安卓APP进行自动化界面点击测试
    【转载】Selenium+Python自动化测试环境搭建和搭建过程遇到的问题解决
    【转载】fiddler软件测试——Fiddler抓取https设置详解(图文)
    【转载】服务器性能测试工具 ---- nmon
    python中的一些好用的库
    python操作excel表格相关的库
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/5049457.html
Copyright © 2011-2022 走看看