dp例题03. 最大子矩阵和
题目Description:
给出一个矩阵, 求子矩阵(可以是其本身)数之和的最大值
Input:
第一行 为行数n和列数m (n≤500, m≤500)
接下来为一个n行m列的矩阵 (每个值ai,−1000 ≤ ai ≤ 1000)
Output:
子矩阵(可以是其本身)数之和的最大值
Sample Input:
4 4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
Sample Output:
15
解题思路:
解法1:单纯用二维前缀和 时间复杂度O(n*n*m*m);(TLE)
解法2:dp+前缀和 时间复杂度O(n*n*m) 或O(n*m*m)
如果是求一维的最长子序列 我们会用O(n)的时间复杂度求出
而这里为二维的, 能否用一维的解法思想去转化一下?
刚开始从行数遍历(不裁剪列数情况下)所有的子矩阵, 需要O(n²)时间, 之后对于这样遍历的子矩阵进行求解最大和,能否利用O(m)时间完成求解
遍历后的二维子矩阵可以一维数组化(即 将 单列上的数相加为一个数, 构造出plus数组), 再利用求一维最长子序列的思想(O(m)时间复杂度)即可
构造plus数组:利用每一列上的前缀和, 比如求第 k 列上第 i 行到第 j 行的数之和 plus[k] = col_sum[j][k] - col_sum[i-1][k]; O(1) 时间复杂度
单独构造col_sum数组: O(n*m)时间复杂度
以下为c语言代码(解法2)
#include <stdio.h>
int a[][], col_sum[][];
int max_subsequence(int * a, int n) {
int sum = -1e7, max = -1e7;
for (int i = ; i < n; i++) {
sum = (sum + a[i] > a[i])? sum + a[i] : a[i];
max = (sum > max)? sum : max;
}
return max;
}
int main() {
int row, col, plus[];
scanf("%d%d", &row, &col);
for (int i = ; i < row; i++) {
for (int j = ; j < col; j++) {
scanf("%d", &a[i][j]);
}
}
for (int j = ; j < col; j++) {
for (int i = ; i < row; i++) {
if (i == ) {
col_sum[i][j] = a[i][j];
}
else {
col_sum[i][j] = col_sum[i-][j] + a[i][j];
}
}
}
int ans = -1e7;
for (int i = ; i < row; i++) {
for (int k = i; k < row; k++) {
if (i == ) {
for (int j = ; j < col; j++) {
plus[j] = col_sum[k][j];
}
int temp = max_subsequence(plus, col);
ans = (temp > ans) ? temp : ans;
}
else {
for (int j = ; j < col; j++) {
plus[j] = col_sum[k][j] - col_sum[i-][j];
}
int temp = max_subsequence(plus, col);
ans = (temp > ans) ? temp : ans;
}
}
}
printf("%d\n", ans);
return ;
}
dp例题03. 最大子矩阵和的更多相关文章
- hdu 1081 dp问题:最大子矩阵和
题目链接 题意:给你一个n*n矩阵,求这个矩阵的最大子矩阵和 #include<iostream> #include<cstdio> #include<string.h& ...
- 基础dp例题整理
背包: 消失之物 先直接做一遍,必然对于i,有 for(j=m;j>=w[i];--j) f[i]+=f[i-w[i]] 所以,如果排除用i做背包的结果,减去这个转移就好了. memcpy(g, ...
- [hdu 4734]数位dp例题
通过这个题目更加深入了解到了数位dp在记忆化搜索的过程中就是实现了没有限制条件的n位数的状态复用. #include<bits/stdc++.h> using namespace std; ...
- 大白第一章第四节dp例题
入口 UVALive - 3882 #include<cstdio> using namespace std; ; int n,m,k,f[N]; int main(){ //f[i]表示 ...
- dp例题02. 滑雪问题 (poj1088)
poj1088滑雪问题 题目链接:http://poj.org/status Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得 ...
- dp例题01. 任务价值最大化
题目Description: 大凯有n项任务可选择去做, 分别对应有开始时间, 结束时间以及任务报酬, 同一时间内最多做一件任务, 现在大凯想知道最多能得到多少报酬, 于是把求解任务交给了你. 输入: ...
- 区间dp 例题
D - 石子合并问题--直线版 HRBUST - 1818 这个题目是一个区间dp的入门,写完这个题目对于区间dp有那么一点点的感觉,不过还是不太会. 注意这个区间dp的定义 dp[i][j] 表示的 ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- LightOJ1033 Generating Palindromes(区间DP/LCS)
题目要计算一个字符串最少添加几个字符使其成为回文串. 一年多前,我LCS这道经典DP例题看得还一知半解时遇到一样的问题,http://acm.fafu.edu.cn/problem.php?id=10 ...
随机推荐
- 前端ps中常用的操作
昨天,ui给了个psd图,让写成网页.额,要自己切图.很久之前,操作的还凑乎.但是,好久了,都忘了.所以,打算自己记个笔记,方便以后查看. 首先,打开ps就先来设置一下ps的单位啦点击最上面的一行的编 ...
- 前端每日实战:1# 视频演示如何用纯 CSS 创作一个按钮文字滑动特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/zhang-ou/pen/GdpPLE 可交互视频教程 此视频 ...
- mysql 常用获取时间sql语句
--当年第一天: SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY); --当年最后一天: SELECT concat(YEAR(no ...
- linux使用php动态安装模块mysqli.so(ext/mysqlnd/mysqlnd.h: 没有那个文件或目录)
由于我先安装的php,再安装的mysql! 正常过程: 1.安装mysql 2.安装php configure时带–with-mysql参数 现在我不想重装,因此使用phpize动态安装mysqli, ...
- button控件根据文本自适应
2020-03-12 每日一例第5天 1.添加按钮1和label.textbox控件,并修改相应的text值: 2.修改textBox1的TextChanged事件并输入代码: button1.Tex ...
- Elasticsearch批量插入时,存在就不插入
当我们使用 Elasticsearch-py 批量插入数据到 ES 的时候,我们常常使用它的 helpers模块里面的bulk函数.其使用方法如下: from elasticsearch import ...
- 《Java8 Stream编码实战》正式推出
当我第一次在项目代码中看到Stream流的时候,心里不由得骂了一句"傻X"炫什么技.当我开始尝试在代码中使用Stream时,不由得感叹真香. 记得以前有朋友聊天说,他在代码中用了 ...
- tomcat 对 vue的history默认支持 tomcat 开启步骤 1.build文件放入webapps目录 2.进入conf目录修改server.xml端口号改成8088 3.进入bin目录运行startup.bat 4.浏览器 localhost:8088/workName 访问即可
tomcat 对 vue的history默认支持 tomcat 开启步骤 1.build文件放入webapps目录 2.进入conf目录修改server.xml端口号改成8088 3.进入bin目录运 ...
- Android网络开发
1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 <LinearLayout xmlns:android="http://sche ...
- 面试官:说说你对css效率的理解
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 大家的支持是我创作的动力. 选择器的优先级 众所周知,选择器是有权重 ...