To the MAX(蓝书刷题记录)
问题描述:给定一个 n*n 的矩阵,求最大子矩阵。
引发一个专题:
求最大子矩阵的方法。
方法一:最朴素的算法可以是枚举两个端点,在对其求和。复杂度O(n^6) hloj 1935护林员盖房子
方法二:预处理出前缀和 sum[i][j]表示由(1,1) 到 (i,j) 的和。
所以由 (x1,y1) 到(x2,y2) 可以O(1) 求。 即为 sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1] 。可以画图理解。 复杂度 O(n^4)
代码:
#include<bits/stdc++.h>using namespace std;
int n;
int a[500][500],sum[500][500],temp[500];
int ans=-1;
// x1 y1--->x2 y2 sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]
inline int cal(int x1,int y1,int x2,int y2){ return sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];}
int main()
{ cin>>n; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]),sum[i][j]=a[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]; for(int x2=1;x2<=n;x2++)for(int y2=1;y2<=n;y2++){for(int x1=1;x1<=x2;x1++)for(int y1=1;y1<=y2;y1++)ans=max(ans,cal(x1,y1,x2,y2));}cout<<ans;return 0;
}
方法三: 考虑对于二维的数组进行压缩。枚举行i 和 j 。这两行之间的数压缩成 temp[k] 表示第k列上 i 到 j 的和。所以temp[] 的最大连续和即为最大子矩阵。需要预处理出sum[i][j] 表示第i 列上的前缀和。复杂度 O(n^3)
代码:
#include<bits/stdc++.h>using namespace std;
int n;
int a[500][500],sum[500][500],temp[500];
int ans=-1;
int main()
{cin>>n;for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]);for(int j=1;j<=n;j++)for(int i=1;i<=n;i++)sum[j][i]=sum[j][i-1]+a[i][j];for(int i=1;i<=n;i++)for(int j=i;j<=n;j++){for(int k=1;k<=n;k++) temp[k]=sum[k][j]-sum[k][i-1];int s=0;for(int i=1;i<=n;i++){s+=temp[i];if(s>ans) ans=s;if(s<0) s=0; }}cout<<ans;return 0;
}
To the MAX(蓝书刷题记录)相关推荐
- bzoj3032 七夕祭(蓝书刷题记录)
引入:经典贪心问题 均分纸牌 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动.移牌规则为:在编号为 1 堆上取的纸牌,只 ...
- CSP-S集训刷题记录
$ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型: 求出字符串 $ S $ 中所有回文串的位置及长度. $ sol ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- $2019$ 暑期刷题记录 $2$(基本算法专题)
$ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...
- 【牛客刷题记录】2021-03-10
牛客代码刷题记录1 问题一 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输 ...
- PAT甲级刷题记录-(AcWing)-(Day06树 8题)
PAT甲级刷题记录-(AcWing)-(Day06树 8题) 课程来源AcWing 其中AcWing中的题目为翻译好的中文题目 今日刷题列表 1110 Complete Binary Tree 111 ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
- 蓝桥杯官网刷题记录python
蓝桥杯官网刷题记录python 由于很多题都会在2020.2021.2022年省赛出现,有的在前面文章里做过的这里就不会再说了 一.空间 小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都 ...
最新文章
- 【Swift】变量/常量/类型总结
- 压缩感知及应用 源代码_【DMD应用】基于压缩感知超分辨鬼成像
- Android项目出现main.xml编译出错和 出现main.out.xml无法编译的解决办法
- java上传文件图片
- RoBERTa中文预训练模型:RoBERTa for Chinese
- React开发(232):传参可以转变思路
- 【CodeForces - 190E】Counter Attack (补图bfs,卡常,dsu)
- Exchange 2010 批量移动邮箱和增加移动请求并发数
- Win 10 安装 Maven 与 Maven 知识点扫盲
- 使用pinyin4j完成中文拼音转换
- 计算机专业买什么牌子的笔记本,买笔记本电脑什么牌子好(2020年6月笔记本电脑推荐)...
- TTL expired in transit (TTL 传输中过期) ping一个ip却返回另一个ip
- Add couter , msn qq online status
- 2019xupt-acm校赛 题解(C.给你一个666)by出题组tongtong
- 案例2:随机森林来填补缺失值
- 项目总结-网络舆情分析
- 【ROS】—— ROS快速上手(一)
- 有源医疗器械常见技术问题及解答汇总
- 「Mysql 事务 隔离级别」 读提交和可重复读的区别
- WPS编辑分段函数公式技巧,怎么对齐分段条件
热门文章
- Liferay Portal 7.4 GA3 and Liferay Commerce 4.0 GA3 Release
- Xilinx FPGA 配置之ICAP
- 对于anaconda安装的一个小感悟 。
- 计算机考研1000题pdf,2020考研张宇1000题(数一、二、三全).pdf
- 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232)
- Go语言中的次方表示
- simpread-机器人智能抓取 AI+Grasp
- 重学计算机网络(一)计算机网络基础
- python自动刷手机视频_万能自动刷视频
- 利用js关闭淘宝二维码?