最大和

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 

例子:

0 -2 -7 0 

9
2 -6 2 

-4
1 -4 1 

-1 8 0 -2 

其最大子矩阵为:

9


-4


-1


其元素总和为15。

输入
第一行输入一个整数n(0<n<=100),表示有n组测试数据;

每组测试数据:

第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;

随后有r行,每行有c个整数;
输出
输出矩阵的最大子矩阵的元素之和。

样例输入

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

样例输出

15

最开始以为用搜索做,结果发现用搜索要比动归更复杂,讨论区还有人暴力求解。。

这道题的思路就是先将各列的和分别求出来(注意这个列并不是指所有的,而是i列到j列),再转化为求一维数组的连续最大和,但在这里有一个连续最大和的核心代码简洁方便;

int i,t=0;

    for(i=1;i<=lie;i++)

    {

        if(t>0)

            t+=a[x][i];//连续最大和当然要连续了,只要i前面的元素之和大于0便可以加;

        else

            t=a[x][i];

        maxx=max(t,maxx);//因为要求最大值,每次都需要比较;

    }//这里的二维数组只是为了题目需要,也可以用一维来模拟;

了解了思路,代码就可以写了;

#include<bits/stdc++.h>

using namespace std;

int a[101][101],maxx,hang,lie;

void fun(int x)

{

    int i,t=0;

    for(i=1;i<=lie;i++)

    {

        if(t>0)

            t+=a[x][i];

        else

            t=a[x][i];

        maxx=max(t,maxx);

    }

}

int main()

{

    int n,i,j,k;

    scanf("%d",&n);

    while(n--)

    {

        scanf("%d%d",&hang,&lie);

        for(i=1;i<=hang;i++)

            for(j=1;j<=lie;j++)

             scanf("%d",&a[i][j]);

        maxx=-10;

        for(i=1;i<=hang;i++)

        {

            fun(i);

            for(j=i+1;j<=hang;j++)

            {

                for(k=1;k<=lie;k++)

                a[i][k]+=a[j][k];

                fun(i);

            }

        }

        printf("%d\n",maxx);

    }

    return 0;

}

NYOJ-104最大和(动归题)及连续最大和核心的更多相关文章

  1. FZU1004-Number Triangle经典动归题,核心思路及代码优化

    Problem 1004 Number Triangle Accept: 2230    Submit: 5895Time Limit: 1000 mSec    Memory Limit : 327 ...

  2. 剑指offer——python【第30题】连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  3. ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和

    题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...

  4. 长度不超过n的连续最大和___优先队列

    题目链接: https://nanti.jisuanke.com/t/36116 题目: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但 ...

  5. nyoj 104 最大和 (二维最大字串和)

    描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵. 例子: - - - - - - - 其最大子矩阵为: - - ...

  6. nyoj 104——最大和——————【子矩阵最大和】

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...

  7. NYOJ 104 最大和

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...

  8. nyoj 10 skiing 搜索+动归

    整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...

  9. NYOJ 104 最大子矩阵(二维DP)

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 给定一个由整数组成二维矩阵(r*c),如今须要找出它的一个子矩阵,使得这个子矩阵内的全部元素之和最大,并把这个 ...

随机推荐

  1. 增强的for循环

  2. Backbone学习记录(6)

    路由 backbone将路由规则和一个方法名绑定到一起,来控制单页的hash,以及单页的前进后退. var UserRouter = Backbone.Router.extend({ routes: ...

  3. wamp无法进入phpMyAdmin或localhost的解决方法

    我用的是最新版的wampsever5,在win7(64位)下安装正常使用,没有无法进入phpMyAdmin的问题,但是我在虚拟机安装了win8(64位专业版),测试在win8下面的使用情况时,就有问题 ...

  4. P1116 车厢重组

    题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车 ...

  5. Windows API函数大全四

    10. API之硬件与系统函数 ActivateKeyboardLayout 激活一个新的键盘布局.键盘布局定义了按键在一种物理性键盘上的位置与含义 Beep 用于生成简单的声音 CharToOem ...

  6. 解决Eclipse自动补全变量名的问题

    原文地址: https://blog.csdn.net/czh500/article/details/53162157

  7. 序列化shelve模块

    1.shelve对pickle进行封装,所以shelve也只能在python里使用. shelve可以进行多次dump而且顺序不会乱. import shelve f = shelve.open('s ...

  8. hihocoder1718 最长一次上升子序列

    思路: 对于每个i,分别求1~i和i+1~N两部分的最长下降子序列“拼”起来,最终取最大长度即可.学习了如何使用BIT把LIS问题O(N2)算法优化为O(Nlog(N))的算法. https://ww ...

  9. Linux上用mvn安装node.js

    Linux上用mvn安装node.js 上一篇blog简略的讲了ubuntu系统的安装,接下来讲讲Ubuntu上的基于node.js的web开发环境的搭建. Node在快速构建网络服务有着极大的优势, ...

  10. COGS 942. [東方S3] 比那名居天子

    Problem 1 比那名居天子(tenshi.cpp/c/pas) 题目描述 在幻想乡,比那名居天子是管理着『要石』的天人.『要石』是能够引发和镇压地震的存在,当然也可以用来改变地形.因为在幻想乡引 ...