随手练——ZOJ-1074 To the Max(最大矩阵和)
To the Max
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074
动态规划(O(n^3))
获得一维数组的最大子数组和:(O(n))
int MaxSubSum(int* arr, int n) {
<< , t = ;
; i < n; i++) {
t += arr[i];
if (t > max) max = t;
) {
t = ;
}
}
return max;
}
目标:
通过一维数组的最大子数组和,找到二维数组的最大矩阵和
1、形如这样的一个二维数组,将其 “压扁” 成为一维数组(数组每列元素的和):

2、首先特殊情况,假设最大子矩阵是二维数组中的粉色部分,则相对应一维数组的最大子数组和就一定也是粉色部分。

3、推广到所有情况,假设最大子矩阵和是二维数组中的,p~q行,i~j列 ;则相对应的 p~q行 的列元素和的最大子数组和就是是 i 到 j 。
代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int n, res = 0x80000000;
][];
int MaxSubSum(int *arr) {
<< , t = ;
; i < n; i++) {
t += arr[i];
if (t > max) max = t;
) {
t = ;
}
}
return max;
}
int main()
{
cin >> n;
; i < n; i++) {
; j < n; j++) {
scanf("%d", &arr[i][j]);
}
}
int* arrSum = new int[n];
; i < n; i++) {
memset(arrSum, , sizeof(int) * n);
for (int j = i; j < n; j++) {
; k < n; k++) {
arrSum[k] += arr[j][k];
}
int t = MaxSubSum(arrSum);
res = t > res ? t : res;
}
}
cout << res << endl;
;
}
随手练——ZOJ-1074 To the Max(最大矩阵和)的更多相关文章
- ZOJ 1074 To the Max
原题链接 题目大意:这是一道好题.在<算法导论>这本书里面,有一节是介绍如何求最大子序列的.这道题有点类似,区别是从数组变成了矩阵,求最大子矩阵. 解法:完全没有算法功底的人当然不知道最大 ...
- ZOJ 1074 To the Max(DP 最大子矩阵和)
To the Max Time Limit: 2 Seconds Memory Limit: 65536 KB Problem Given a two-dimensional array o ...
- 随手练——ZOJ 1093 Monkey and Banana(动态规划)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- SUBSTRING / CHARINDEX_函数随手练_2
SUBSTRING / CHARINDEX_函数随手练_2环境:MSSQL 2014(AdventureWorks2008R2附加到2014中的表 Location) /* Learning SQL ...
- case when then 随手练_1
CASE WHEN THEN随手练,就当做练习指法吧 --drop table tbStudent GO Create table tbStudent( studentId int identity( ...
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle ...
- ZOJ 1074 最大子矩阵和
Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...
- 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...
随机推荐
- Mysql添加字段.md
alter table td_user add gender bit DEFAULT 0 COMMENT '性别';
- WebKit的Platform接口部分
转载请注明出处:http://www.cnblogs.com/fangkm/p/3787977.html WebKit中解析.渲染网页的过程中需要一些功能,比如: socket连接.URL资源请求的实 ...
- linux系统编程:open常用参数详解
open用于打开一个文件,通过设置不同的flag,可以让进程只读,只写,可读/可写等操作 一.对一个不存在或者存在的文件(test.txt),进行写入操作 /*==================== ...
- Angular 6.X CLI(Angular.json) 属性详解
Angular CLI(Angular.json) 属性详解 简介 angular cli 是angular commond line interface的缩写,意为angular的命令行接口.在an ...
- 【代码笔记】iOS-Transition动画
一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- Java 根据出生日期计算年龄
1.把出生日期字符串转换为日期格式. public static Date parse(String strDate) throws ParseException { SimpleDateFormat ...
- 使用kafka consumer api时,中文乱码问题
使用Intelli idea调试kafka low consumer时,由于broker存储的message有中文, idea中console端是可以正确显示的 然后mvn package打包到服务器 ...
- vs2015 停 在 update kb2999226 一直不动
查找原因是因为装微软补丁,官网找到该补丁安装 Update for Windows 7 for x64-based Systems (KB2999226) https://www.microsoft. ...
- Android应用程序进程启动过程(后篇)
前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池 ...
- Python数据类型之list和tuple
list是一种有序的集合,可以随时添加和删除其中的元素. 用len()函数可以获得list元素的个数. 用索引来访问list中每一个位置的元素,索引是从0开始的.如果要取最后一个元素,除了计算索引位置 ...