九度OJ 1501 最大连续子序列乘积 -- 动态规划

[DP解题] 乘积最大子序列 [DP解题] 乘积最大子序列 原题链接:https://leetcode.com/problems/maximum-product-subarray/ [问题] Given an integer arraynums, find the contiguous subarray within an array (containing at least one number) which ha... 阅读详情

题目地址:http://ac.jobdu.com/problem.php?pid=1501

题目描述:

给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。

输入:

输入可能包含多个测试样例。
每个测试样例的第一行仅包含正整数 n(n<=100000),表示浮点数序列的个数。
第二行输入n个浮点数用空格分隔。
输入数据保证所有数字乘积在双精度浮点数表示的范围内。

输出:

对应每个测试案例,输出序列中最大的连续子序列乘积,若乘积为浮点数请保留2位小数,如果最大乘积为负数,输出-1。

样例输入:
7
-2.5 4 0 3 0.5 8 -1
5
-3.2 5 -1.6 1 2.5
5
-1.1 2.2 -1.1 3.3 -1.1
样例输出:
12
64
8.78
来源:
小米手机2013年校园招聘笔试题


状态Max[i]表示以data[i]结尾的最大连续子串乘积值,Min[i]表示以data[i]结尾的最小连续子串乘积值(考虑到负数的情况)。

状态转移方程:Max[i] = max(data[i], Max[i-1]*data[i], Min[i-1]*data[i]),

                         Min[i] =  min(data[i], Max[i-1]*data[i],  Min[i-1]*data[i]).

#include <stdio.h>
 
#define LEN 100000
 
int N;
double data[LEN];
double max[LEN];
double min[LEN];
 
double Max(double a, double b){
    return (a > b) ? a : b;
}
 
double Min(double a, double b){
    return (a < b) ? a : b;
}
 
double MMS(){
    int i;
    double ans;
    max[0] = min[0] = data[0];
    ans = data[0];
    for (i = 1; i < N; ++i){
        max[i] = Max(Max(data[i], max[i-1]*data[i]), min[i-1]*data[i]);
        min[i] = Min(Min(data[i], max[i-1]*data[i]), min[i-1]*data[i]);
        ans = Max(ans, max[i]);
    }
    return ans;
}
 
int main(void){
    int i;
    double ans;
    while (scanf("%d", &N) != EOF){
        for (i = 0; i < N; ++i)
            scanf("%lf", &data[i]);
        ans = MMS();
        if (ans < 0)
            printf("-1\n");
        else if (ans - (int)ans <= 1e-5)
            printf("%lld\n", (int)ans);
        else
            printf("%.2lf\n", ans);
    }
 
    return 0;
}

参考资料: 程序员编程艺术第二十八~二十九章:最大连续乘积子串、字符串编辑距离

PCL Fast Global Registration 快速全局配准(源码版) Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。 阅读详情

相关推荐

设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

告别手动画图,提高效率~

楼下小黑哥 2万+

Leetcode——乘积最大的子序列(DP)

152.给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 思路: 1.暴力递归,时间复杂度很高 2.DP,两步曲,首先找到状态的定义DP[i],...

IT荻的博客 1265

Ceres Solver:从入门到使用

Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中,尤其在谷歌开源的cartographer中被大量的使用。 ceres可以在Linux,Windows,macOS,Andrioid,IOS系统进行安装使用,详情可查看下方的官网链接。 Ceres Solver 官网:http://ceres-solver.org/

非晚非晚的博客 1万+

乘积最大子序列

题目描述:找出一个序列中乘积最大的连续子序列(至少包含一个数)。 样例:比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。 动态规划问题,用一个数组record记录每次运算的结果。这里面有个问题,就是求前n位的乘积最大子序列的最大乘积时,的确和前n - 1位有关,但是不一定和前n - 1位的乘积最大子序列的乘积有关,他有可能是由乘积最小子序列得到的

guoziqing506的博客 3465

2024阅读AOSP源码的正确打开姿势

在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。

虎哥LoveDroid 2710

halcon第一讲:基本操作

本文通过Blob分析提取出图片中的硬币,来熟悉halcon的基本操作。 1、读取图像,halcon读取图像有三种方式:1)、文件-&gt;读取图像;2)、通过助手;3)、代码 *打开窗口 dev_open_window (0, 0, 512, 512, 'black', WindowHandle) *读取图像 read_image (Image,'1.png') 读取的图像如下: 2...

qq_24946843的博客 3万+

最大连续子序列乘积

问题描述 给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720。 分析 求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。 假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来

__七把刀__ 7996

从权限对象到业务角色:把 SAP Authorization Object 讲清楚,并用 ABAP 写对一次 AUTHORITY-CHECK

摘要:SAP权限管理的核心在于Authorization Object(授权对象),它通过组合最多10个授权字段来精确控制用户访问权限。关键要点包括:1) 授权对象与ACTVT字段(如01创建/02修改/03显示)的配合使用;2) ABAP中AUTHORITY-CHECK语句的四种常见返回码(0通过/4字段不匹配/12无权限/40无效用户);3) 系统自动执行的S_TCODE事务码检查;4) 自定义授权对象时应遵循"最少且足够"原则,优先复用标准对象。在RAP和OData场景中,权限检查

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 268

连续子序列的最大乘积

问题描述   给定一个整数序列,序列中可能含有0,正数,负数,求出连续子序列乘积的最大值 暴力解法   双层循环,一一遍历,每次将当前结果与前次结果要比较,如果大于前次结果,更新最大值,时间复杂度为O(n2),复杂度较高,代码略 动态规划解法   对于序列arr,maxDp[k]表示以arr[k](必须包含arr[k])结尾的最大连续子序列乘积值,minDp[k]表示以arr[k](必须...

weixin_34405332的博客 527

在 RAP 中把业务对象“搬到网口上”:service definition 与 service binding 的全流程、范式与实战

本文解析了SAP ABAP开发中service definition和service binding的关键作用。service definition负责选择要暴露的CDS实体和行为,形成服务模型;而service binding则将服务绑定到具体协议(如OData),生成可访问的端点。两者分离带来三大优势:支持同一模型多重发布、降低环境迁移耦合度、强化安全治理。文章通过预订业务对象的端到端示例,展示了如何从CDS建模到生成Fiori Elements预览。最后以售后工单业务为例,说明这种架构如何支持内外服务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

十三种通信接口芯片——《器件手册--通信接口芯片》

通信接口芯片用于实现差分信号的传输,具有抗干扰能力强、传输距离远等优点。RS485支持多点通信,可连接多个收发器,而RS422支持单向多点通信。广泛应用于工业自动化、过程控制、仪器仪表、楼宇自动化(如暖通空调、保安系统)、电机控制等领域。ST3485EBDRTP8485ESR用于实现串行通信,支持点对点通信,传输距离相对较短,数据速率较低。常用于计算机与外设(如打印机、调制解调器)之间的通信。如芯力特的SIT3232,可作为ST3232的替代品。

XU157303764的博客 4275

191. 乘积最大子序列

191.乘积最大子序列 找出一个序列中乘积最大的连续子序列(至少包含一个数)。 样例 样例 1: 输入:[2,3,-2,4] 输出:6 样例 2: 输入:[-1,2,4,1] 输出:8 注意事项 数组长度不超过20000 乘积最大的子序列的积,小于2147483647 public class Solution { /** * @param nums: An array of integers ...

时代我西的博客 198

stable-diffusion-webui的逐步部署教程

本文主要介绍了stable-diffusion-webui的逐步部署教程,希望能对使用Stable Diffusion的同学们有所帮助。 文章目录 1. 前言 2. 逐步部署教程 2.1 创建Python环境 2.2 安装依赖库 2.3 运行代码

weixin_43178406的博客 6万+

打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

题目描述:为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?输入:输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金...

weixin_33765959的博客 184

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

152. 乘积最大子序列

乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 本题是字串问题 与前面的子串最大和 类似 核心就是 确定一个数组dp【i】...

Since Gate 250

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

算法题——最大(连续)子序列乘积

参考July博客:最大连续子序列乘积 先考虑不连续的 思路:一维动态规划   考虑到乘积子序列中有正有负也还可能有0,可以把问题简化成这样: 数组中找一个子序列,使得它的乘积最大;同时找一个子序列,使得它的乘积最小(负数的情况)。 虽然只要一个最大积,但由于负数的存在,也要记录最小乘积。碰到一个新的负数元素时,最小乘积相乘之后得到最大值。 代码: 1 int...

weixin_30525825的博客 402

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

最大连续子序列的和与积

这是两个非常相似的问题,最大子序列和思路:当前面加的数据和小于等于0时,就放弃前面的序列,用一个变量记录前面的最大和;依次计算子序列和,每次计算出的结果和之前保存的最大值相比较并更新最大值。 最大子序列积思路:他的条件判断变成前面数据的积为0是,就放弃前面的序列,其他思路和上面一样,重要的是他需要两次的遍历数组, 因为很可能数组中负数是奇数个,这时候要找出负数两边的最大值,再比较这两边的那

学习印记 Learning imprint 1802

最大连续子序列和/乘积(DP)

思路 最大连续子序列乘积和最大连续子序列和不同,这里先回忆一下最大连续子序列和的最优解结构: 最大连续子序列和 我们用sum[i]来表示以arr[i]结尾的最大连续子序列和,则状态转移方程为: 最大连续子序列乘积 考虑存在负数的情况(ps:负负会得正),因此我们用两个辅助数组,max[i]和min[i],max[i]来表示以arr[i...

Whiisper_ 363

动态规划——LeetCode152乘积最大子序列

给定一个整数数组 nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释:子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释:结果不能为 2, 因为 [-2,-1] 不是子数组。 思路: max表示以当前节点为终结节点的最大连续子序列乘积 min表示以当前节点为终...

great978的博客 389

最大连续子序列乘积_1501

题目描述: 给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。 输入: 输入可能包含多个测试样例。 每个测试样例的第一行仅包含正整数 n(n 第二行输入n个浮点数用空格分隔。 输入数据保证所有数字乘积在双精度浮点数表示的范围内。 输出: 对应每个测试案例,输出序列中最大的连续子序列乘积,若乘积为浮点数请保留2位小数

bluewelkin的专栏 578
上一篇: 九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
下一篇: 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
JDPlus
博客等级 码龄15年 221粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值