当前位置: 首页 > news >正文

To the Max

To the Max poj-1050

    题目大意:给你一个n*n的矩阵,求最大子矩阵的和。每一个数不一定是正数。

    注释:n<=100.

      想法:以前听学长讲过bz的玉蟾宫,好像这题可以$n^3$。我在此介绍$n^3$的做法。这其实是一种扩展:首先,我们会O(n)的求一串数的最大连续字段和。我们想,如何才能处理出矩阵层面的最大子矩阵呢?我们想,我既然会求一串数的最大连续字段和,那么我们就可以将这个过程进行拓展,我们可以求出任意两行之间的最大子矩阵,这个子矩阵的上下两条边分别在这两行上。这样的话我们怎么处理,比如说我们枚举到了i行到j行,那么,我们对于每一列的元素,就可以将每一列的元素相加成一个,然后用O(n)的算法求出最大子矩阵,然后维护前缀和,before[i][j]表示for(int k=1;k<=i;k++) ans+=a[k][j],即可。

    最后,附上丑陋的代码... ...

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int a[110][110];
 5 int before[110][110];
 6 int main()
 7 {
 8     int n;
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11     {
12         for(int j=1;j<=n;j++)
13         {
14             scanf("%d",&a[i][j]);
15         }
16     }
17     for(int i=1;i<=n;i++)
18     {
19         for(int j=1;j<=n;j++)
20         {
21             before[i][j]=before[i-1][j]+a[i][j];
22         }
23     }
24     int maxmid=0xefefefef;
25     int maxbefore=0xefefefef;
26     int maxall=0xefefefef;
27     for(int i=1;i<=n;i++)
28     {
29         for(int j=i;j<=n;j++)
30         {
31             maxbefore=0;
32             maxmid=0xefefefef;
33             for(int k=1;k<=n;k++)
34             {
35                 if(maxbefore<0) maxbefore=before[j][k]-before[i-1][k];
36                 else maxbefore+=before[j][k]-before[i-1][k];
37                 maxmid=max(maxmid,maxbefore);
38             }
39             maxall=max(maxall,maxmid);
40         }
41     }
42     printf("%d\n",maxall);
43     return 0;
44 } 

    小结:要学会活学活用,这题1A,没错误。

转载于:https://www.cnblogs.com/ShuraK/p/8367256.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql--------char 和 varchar 的区别
  • WMI应用(一个系统自带的测试WMI语句的工具)
  • Flask从入门到精通之在视图函数中处理表单
  • js原型链和继承
  • vue实例相关2
  • Django-Ajax
  • ChildProcAppHandle记录(spark-2.2.0)
  • ivew语法中'${}`的用法
  • 常用CSS技术收藏
  • C#中out和ref之间的区别
  • 我在GitHub Pages托管静态博客啦~
  • php实现文件上传
  • ES6中的let、contst
  • 画一个皮卡丘项目小结(2)
  • 2018-02-05(jQuery)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【mysql】环境安装、服务启动、密码设置
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • es的写入过程
  • golang 发送GET和POST示例
  • JavaScript 奇技淫巧
  • JavaScript中的对象个人分享
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js
  • JS学习笔记——闭包
  • PHP 7 修改了什么呢 -- 2
  • Python - 闭包Closure
  • Python学习之路16-使用API
  • uni-app项目数字滚动
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 深度学习在携程攻略社区的应用
  • 试着探索高并发下的系统架构面貌
  • 手写一个CommonJS打包工具(一)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 积累各种好的链接
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​决定德拉瓦州地区版图的关键历史事件
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $.each()与$(selector).each()
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (HAL库版)freeRTOS移植STMF103
  • (WSI分类)WSI分类文献小综述 2024
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)OpenStack Hacker养成指南
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET Project Open Day(2011.11.13)
  • .Net 代码性能 - (1)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 提取注释生成API文档 帮助文档