HDU 1081 To The Max (dp)
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
题目分析:
一个N*N的矩阵中的,寻找最大的子矩阵。
主要应用到矩阵压缩的思想,如果某个子矩阵的和最大,我们可以把他们的和压缩为一行,则此时的连续子序列和胃最大的。检查所有的压缩组合,从第一行开始,检查所有的包含此行的往下的行的子矩阵,找出包含此行的子矩阵的最大值,接着检查包含下一行的往下的所有的子矩阵。
代码:
    #include<iostream >
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int main()
    {
        int jz[141][141],dp[141],sum[141],Max;
        int N,i,j;
        while(~scanf("%d",&N))
        {
            Max=-1333;      ///Max的值每次都要刷新
            for( i=0; i<N; i++)
                for( j=0; j<N; j++)
                    scanf("%d",&jz[i][j]);///给矩阵赋值
            for(int k=0; k<N; k++)///循环每行都要作为一个起始行
            {
                memset(dp,0,sizeof(dp));///dp数组刷新
                memset(sum,0,sizeof(sum));///sum数组刷新
                for(int i=k; i<N; i++)///从当前行开始循环
                {
                    for(int j=0; j<N; j++)///每一列都要考虑
                        sum[j]+=jz[i][j];///以前到该列的子矩阵加上该列的
                    dp[0]=sum[0];
                    for(int h=1; h<N; h++)
                    {
                        dp[h]=max(dp[h-1]+sum[h],sum[h]);///以前的和现在的取大值
                        if(dp[h]>Max)
                            Max=dp[h];
                    }
                }
            }
            printf("%d\n",Max);
        }
    }
												
											HDU 1081 To The Max (dp)的更多相关文章
- hdu 1081 To The Max(dp+化二维为一维)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081 To The Max Time Limit: 2000/1000 MS (Java/Others ...
 - HDU 1081 To The Max【dp,思维】
		
HDU 1081 题意:给定二维矩阵,求数组的子矩阵的元素和最大是多少. 题解:这个相当于求最大连续子序列和的加强版,把一维变成了二维. 先看看一维怎么办的: int getsum() { ; int ...
 - HDU 1864 最大报销额(DP)
		
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1864 题目: 最大报销额 Time Limit: 1000/1000 MS (Java/Others) ...
 - HDU 2639   Bone Collector II   (dp)
		
题目链接 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in ...
 - HDU 4562 守护雅典娜(dp)
		
守护雅典娜 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submi ...
 - HDU - 6199 gems gems gems (DP)
		
有n(2e4)个宝石两个人轮流从左侧取宝石,Alice先手,首轮取1个或2个宝石,如果上一轮取了k个宝石,则这一轮只能取k或k+1个宝石.一旦不能再取宝石就结束.双方都希望自己拿到的宝石数比对方尽可能 ...
 - 2014多校第七场1005  ||  HDU 4939 Stupid Tower Defense  (DP)
		
题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害 ...
 - poj - 1050 - To the Max(dp)
		
题意:一个N * N的矩阵,求子矩阵的最大和(N <= 100, -127 <= 矩阵元素 <= 127). 题目链接:http://poj.org/problem?id=1050 ...
 - HDU - 6357 Hills And Valleys(DP)
		
http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 ...
 
随机推荐
- zuoyeQAQ
			
public class StringAPIDemo { /** * @param args */ public static void main(String[] args) { // TODO A ...
 - 【Linux】- cat命令的源码历史
			
转自:Cat 命令的源码历史 以前我和我的一些亲戚争论过计算机科学的学位值不值得读.当时我正在上大学,并要决定是不是该主修计算机.我姨和我表姐觉得我不应该主修计算机.她们承认知道如何编程肯定是很有用且 ...
 - (转)Elasticsearch search-guard 插件部署
			
我之前写了ELK+shield的部署文档,由于shield是商业收费的,很多人都推崇开源项目search-guard来做ELK的安全组件,准确来说是elasticsearch的安全组件.search- ...
 - php简易配置函数
			
nilcms中:php简易配置函数. 文件位置:nc-admin/common.php /* * --------------------------------------------------- ...
 - HDU4811_Ball
			
又是数学题. 每次放入一个球所得到的的分数为x1+x2(x1表示左边的球中颜色的种数,x2表示右边) 其实如果一个球的数量超过了2,那么剩下的就是一个乘法了. 这个理解很简单,因为超过了2的话,说明最 ...
 - 51nod-1227-平均最小公倍数
			
题意 定义 \(n\) 的平均最小公倍数: \[ A(n)=\frac{1}{n}\sum _{i=1}^n\text{lcm}(n,i) \] 求 \[ \sum _{i=L}^RA(i) \] \ ...
 - jmeter同步定时器
			
同步定时器是jmeter中一个比较重要的定时器,同步定时器,相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起并发,可以用来做大数据量的并发请求. 验证 ...
 - PHP 中数组获取不到元素
			
早上看到 SO 上一个有关 PHP 的问题,提问者描述有一个数组,使用 print_r 可以看到索引 key 和相对应的 value 都是存在的,但是访问该元素,不管是使用 array[key] 还是 ...
 - mysql允许远程特定ip访问
			
1.登录 mysql -u root -p 之后输入密码进行登陆 2.权限设置及说明 2.1添加远程ip访问权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.1 ...
 - 我的emacs简易配置
			
;;------------语言环境字符集设置(utf-8)------------- (set-language-environment 'Chinese-GB) (set-keyboard-cod ...