POJ-1050 To the Max 二维最大子段和

题意

给我们一个二维矩阵
让我们在找出其中的最大子矩阵和

分析

对输入的一个矩阵
我们考虑一维线性矩阵 上的最大子段和
对于一个数串 我们的选择策略是

res = max(res,max( sum+a[ i ], a[ i ] ));

res就是最后我们得到的最大子段和的结果 a[i]是数串元素
我们这里可以把它压缩成一维
枚举任意两行 然后把两行之间的行压缩成1行
对这一行进行一维的最大字段和求解
所以最大子矩阵和就可以将二维中的任一一维压缩成一维 然后用一维最大字段和的
办法求解

关于一维最大字段和问题:
/* b本可以设为数组 表示以第i个元素结尾的最大字段和是多少 也就是在b[i] = max(b[i-1]+dp[i],dp[i])中选择最大
这里就是两种选择 对于一个数串 为了求出最大子段和 我们可以选择累加 也可以选择扔掉前面的就取当前元素作为新子段的开始元素 选择累加前缀和 还是选择构造新子段 分别对应两种策略 两者取最优
若累加时表示能够正向让前缀和增大我们累加
若累加只能更小 我们选择扔掉时表示前面的元素
何时累加会变小 有两种情况 如果此时累加和为负数
如果新元素是个负数 负数相加只能更小 所以不如取一个更大的负数
如果新元素是个正数 那么不如就取当前元素 扔掉前面的
以上两种可能在前面累加和是负数的情况下 都选择max的后者为最优情况
所以当前面累加和为负数 直接扔掉 选后面的准没错
由于只用到前后两个元素所以可以节省空间用一个变量简略表示 */

code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,dp[110],a[110][110];
int Max()
{int b = 0,res=-130;for(int i=1;i<=n;i++){if(b>0)b+=dp[i];// 表示能如果遇到正数还能继续递增else b = dp[i];//如果是负数 由于负数只能越加越小 所以那么直接让他等于当前元素res = max(res,b);//最优化结果}return res;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);}int res=-130;for(int i=1;i<=n;i++){for(int j = i;j<=n;j++){for(int k=1;k<=n;k++)dp[k]+=a[j][k];int ma = Max();res = max(ma,res);  }memset(dp,0,sizeof(dp));}printf("%d\n",res);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16.jsp结构

JSP 结构 网络服务器需要一个 JSP 引擎&#xff0c;也就是一个容器来处理 JSP 页面。容器负责截获对 JSP 页面的请求。本教程使用内嵌 JSP 容器的 Apache 来支持 JSP 开发。 JSP 容器与 Web 服务器协同合作&#xff0c;为JSP的正常运行提供必要的运行环境和其他服务&#xff…

将一个5X5的矩阵中最大的元素放在中心, 4个角分别放4个最小的元素(顺序为从左到右,从上到下,从小到大存放)其余数字从小到大

将一个5X5的矩阵中最大的元素放在中心&#xff0c; 4个角分别放4个最小的元素&#xff08;顺序为从左到右&#xff0c;从上到下&#xff0c;从小到大存放&#xff09; 其余数字从小到大 在以前的要求上更改了一下&#xff0c;其余数字从小到大排序 #include <stdio.h> #…

[剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]

【问题描述】[中等] 从上到下打印出二叉树的每个节点&#xff0c;同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回&#xff1a;[3,9,20,15,7]【解答思路】 BFS 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a…

HDU 4403 A very hard Aoshu problem DFS

problem statement 这道题给我们一个不超过15位的整数 让我们在其中加等号或者加号 如果加完符号后符合计算结果 那么计数 最后输出所有的情况 problem analysis 这道题其实就是想办法遍历所有情况 把合法的记录下来 最终输出就得到解 如何枚举呢 我们可以枚举等号的位置…

计算机网络考试题库

计算机网络考试题库 第一章 一、单项选择题 1、计算机网络可以被理解为&#xff08; B &#xff09; A.执行计算机数据处理的软件模块 B.由自治的计算机互联起来的集合体 C.多个处理器通过共享内存实现的紧耦合系统 D.用于共同完成一项任务的分布式系统 2、计算机网络最基本的功…

《深入理解Java虚拟机》读书笔记一

第二章 Java内存区域与内存溢出异常 1、运行时数据区域 程序计数器&#xff1a; 当前线程所执行的字节码的行号指示器&#xff0c;用于存放下一条需要运行的指令。运行速度最快位于处理器内部。线程私有。虚拟机栈&#xff1a; 描述的是Java方法执行的内存模型&#xff0c;用于…

[Leedcode][JAVA][第16题][最接近的三数之和][双指针][数组]

【问题描述】[中等] 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&…

LIS 的 n*log 算法 ———二分维护

upper_bound只会替换让留在数组里的最长递增子序列尽可能小 由于upper查出来的结果下标是那个可以插入这个值得最后一个元素 所以他会把大的数变成小的数 upper将可以替换成新元素的元素替换成更小的 将不能替换的元素 大的元素直接放在最后面 很神奇 你会发现 这个问题 …

[剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]

【问题描述】[简单] 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其层次遍历结果&#xff1a;[[3],[9,20],[15,7] ]【解答思路】 层次遍历 BFS 时…

爬虫入门-3.初识BeautifulSoup

一.安装BeautifulSoup BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup配合Request使用&#xff0c;能大大提高爬虫效率。 pip install BeautifulSoup 二.常见操作 from bs4 impor…

19.jsp生命周期

JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期。 JSP生命周期就是从创建到销毁的整个过程&#xff0c;类似于servlet生命周期&#xff0c;区别在于JSP生命周期还包括将JSP文件编译成servlet。 以下是JSP生命周期中所走过的几个阶段&#xff1a; 编译阶…

HDU-3998 Sequence LIS统计

题意 让我们在数串统计最长长度的LIS有多少个 每个LIS元素没有重叠 分析 这题可以用nlogn的LIS方法水过 就是每次我们更新找到的LIS长度的时候 就把当前位置下的元素标记 表示我们把它删掉了 不断地重复找LIS的过程 最后如果找到的长度小于我们最初找到的LIS长度 就退出循…

[剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]

【问题描述】[中等] 请实现一个函数按照之字形顺序打印二叉树&#xff0c;即第一行按照从左到右的顺序打印&#xff0c;第二层按照从右到左的顺序打印&#xff0c;第三行再按照从左到右的顺序打印&#xff0c;其他行以此类推。 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ …

20.jsp语法

JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法。 脚本程序 脚本程序可以包含任意量的Java语句、变量、方法或表达式&#xff0c;只要它们在脚本语言中是有效的。 脚本程序的语法格式&#xff1a; <% 代码片段 %> 或者&#xff0c;您也可以编写与其等价的XM…

HDU-4282 A very hard mathematic problem 技巧枚举+二分

题意 xzyzx∗y∗zk( y>x&&z>1) 给我们这个等式让我们找出这里面有多少个不同的可行解 分析 表面上数据范围比较大 但由于k最大都在int范围内 由于后面还有一个x*y*z 于是这个式子的指数不会超过31 再来分析x和y 这里必定是一个y大x小 那么假如我们先枚举一个…

21.jsp指令

JSP 指令 JSP指令用来设置整个JSP页面相关的属性&#xff0c;如网页的编码方式和脚本语言。 语法格式如下&#xff1a; <% directive attribute"value" %> 指令可以有很多个属性&#xff0c;它们以键值对的形式存在&#xff0c;并用逗号隔开。 JSP中的三种…

基于docker创建的Jenkins,settings.xml文件放在哪里

如果运行容器时挂载目录如下 启动容器 docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privilegedtrue --restartalways -v /home/jenkins_home:/var/jenkins_home jenkins/jenkins:latest 则需要将开发给的settings.xml文件中的localRepository路径改为容器中…

[Leedcode][JAVA][第139题][单词拆分][递归][记忆优化][动态规划]

【问题描述】[中等] 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明&#xff1a;拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1&#xff1a;输入: s …