NYOJ-104最大和(动归题)及连续最大和核心
最大和
- 描述
-
给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。
例子:
0 -2 -7 0
9
2 -6 2
-4
1 -4 1
-1 8 0 -2
其最大子矩阵为:9
2
-4
1
-1
8
其元素总和为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最大和(动归题)及连续最大和核心的更多相关文章
- FZU1004-Number Triangle经典动归题,核心思路及代码优化
Problem 1004 Number Triangle Accept: 2230 Submit: 5895Time Limit: 1000 mSec Memory Limit : 327 ...
- 剑指offer——python【第30题】连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和
题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...
- 长度不超过n的连续最大和___优先队列
题目链接: https://nanti.jisuanke.com/t/36116 题目: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但 ...
- nyoj 104 最大和 (二维最大字串和)
描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵. 例子: - - - - - - - 其最大子矩阵为: - - ...
- nyoj 104——最大和——————【子矩阵最大和】
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...
- NYOJ 104 最大和
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...
- nyoj 10 skiing 搜索+动归
整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...
- NYOJ 104 最大子矩阵(二维DP)
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描写叙述 给定一个由整数组成二维矩阵(r*c),如今须要找出它的一个子矩阵,使得这个子矩阵内的全部元素之和最大,并把这个 ...
随机推荐
- Invitation Cards POJ 1511 SPFA || dij + heap
http://poj.org/problem?id=1511 求解从1去其他顶点的最短距离之和. 加上其他顶点到1的最短距离之和. 边是单向的. 第一种很容易,直接一个最短路, 然后第二个,需要把边反 ...
- 01.第一章_C++ Primer学习笔记_开始
1.2 初始输入输出 iostream库里面包含两个基础类型istream和ostream,分别表示输入流和输出流,一个流就是一个字符序列,从IO设备读出或者写入IO设备. 标准的输入输出对象 标准库 ...
- Hibernate5 与 Spring Boot2 最佳性能实践
参考 Hibernate5 与 Spring Boot2 最佳性能实践(1) Hibernate5 与 Spring Boot2 最佳性能实践(2) Best Performance Practice ...
- 新手玩CSS中的一些黑科技
哎哎 1.鼠标移进网页里,不见了= = *{ cursor: none!important; } 2.简单的文字模糊效果 *{ color: transparent; text-shadow: #11 ...
- ES6学习笔记(12)----Reflect
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Reflect 1.概述:Object对象的内部方法都能在Reflect中找到,同时Reflec ...
- Python Linked List
上周日教导一个科班非技术的朋友学习 Python 编程.他的 Python 水平大概就是看了几篇短的 Python 介绍博客.会流程控制和全局函数编写. 具体教导思路是从自己实现一个链表出发,研究学习 ...
- sysUpload.vue上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock')
上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock') <!-- * ...
- js 根据指定个数切割数组
Part.1 问题 写项目时,遇到需要前端做 假分页 的问题:后端会将数据全部返回,前端自己做分页 Part.2 思路 拿到后端全部返回的数据后,按照 产品需求 进行分页,如每页显示 10 条数据为 ...
- C-基础:关于预编译以及宏
这是没有引入任何头文件时,如果使用"NULL",编译器会报错:没有定义NULL.此时可用下面代码定义. #undef NULL //#undef 是在后面取消以前定义的宏定义#if ...
- Mac下Apache服务器的初步搭建
回送地址 127.0.0.1(localhost) ping 这个地址可以检测网卡是否正常 ping 本地地址如果不正常说明网线挂了 // 启动 sudo apachectl -k start ...