NYOJ 104 - 最大和
来源:互联网 发布:重庆淘宝店铺运营公司 编辑:程序博客网 时间:2024/05/16 06:49
描述
给定一个由整数组成二维矩阵(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
简单DP,无需多言。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int mat[105][105];int tmp[105][105];int main(){ int T; scanf("%d", &T); while (T--) { int n, m; scanf("%d %d", &n, &m); for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) scanf("%d", &mat[i][j]); memset(tmp, 0, sizeof(tmp)); int sum, maxn; maxn = -100000; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) tmp[i][j] = tmp[i-1][j] + mat[i][j]; for (int i = 1; i <= n; ++i) { for (int j = i; j <= n; ++j) { sum = 0; for (int k = 1; k <= m; ++k) { if (sum > 0) sum += (tmp[j][k] - tmp[i-1][k]); else sum = tmp[j][k] - tmp[i-1][k]; maxn = max(maxn, sum); } } } printf("%d\n", maxn); } return 0;}
0 0
- nyoj 104 最大和
- NYOJ 104 最大和
- NYOJ-104 最大和
- nyoj 104 最大和
- NYOJ 104 最大和
- NYOJ 104 最大和
- nyoj 104 最大和
- nyoj 104 最大和
- NYOJ 104 - 最大和
- NYOJ 104 最大和
- NYOJ-104-最大和
- nyoj 104最大和
- NYOJ 104 最大和
- NYOJ - 104 最大和【DP】
- nyoj 104 最大和 【dp】
- nyoj 44 子串和 & nyoj 104 最大和
- NYOJ 104-最大和【模板:最大子阵和】
- 最大和 NYOJ——104
- 灰常简易的顺序队列
- 小波的秘密10_图像处理应用:图像增强
- MongoDB 那些坑
- [hard]273. Integer to English Words
- django
- NYOJ 104 - 最大和
- 实现可变参数函数:Max,求最大值。
- Android 6.0关机流程图
- 扩展性、易用性 浅谈游戏状态机的设计与实现
- JZOJ 4863. 【GDOI2017模拟11.5】Market
- 剑指offer:面试题9,斐波那契数列
- HDU-2874-Connections between cities
- NOIP2012 借教室
- SQL server常用指令整理——根据西交coursera公开课整理(二)