动态规划 剪绳子 (JS 实现)

切绳子html5游戏源代码 切绳子html5游戏源代码,国外。 测试过,可玩 立即下载

题目

现有一根长度为N的绳子,需要你剪成M段,使M段的乘积最大。(其中M、N都为整数,剪成的每段长度也为整数,N已知,M未知)。例如长度为8的绳子,当剪为3段乘积最大,即2*3*3=18.

思路

看到这种求最优解的题型,你就应该思考一下动态规划是否适合。这个绳子我可以一次一次的剪,第一次剪成两段,这就变成两根新绳子,只要我分别知道这两根新绳子最大的乘积,那么我就知道了整条绳子的最大乘积了,这就将一个问题,划分为两个子问题了,且各子问题之间相互独立,满足最优子结构,因此可以使用动态规划

首先确定边界条件和状态转移方程:

  • 当绳子长度为1时,最大乘积为0
  • 当绳子长度为2时,可以剪成1*1,最大乘积为1
  • 当绳子长度为3时,可以剪成(1*2,1*1*1),最大乘积为2
  • 当绳子长度为4时,可以剪成(1*1*1*1, 1*2*1, 2*2, 1*3),最大乘积为4
  • 当绳子长度为5时,可以剪成(1*1*1*1*1, 1*2*2, 3*2, 1*2*1*1, 1*3*1,1*4),最大乘积为6

我们可以看到,当绳子长度n大于等于4时,f(n) = max( f(i) * f(n-i) ),其中1 < i <= [n/2],因此我们可以用遍历来实现状态转移方程

代码

function LineMax(n){
    if (n<=1) return 0;
    if (n==2) return 1;
    if (n==3) return 2;
    const a =[0,1,2,3];      //排出前面的边界条件,第i项表示长度为i的绳子的最大乘积
    const b =[[0],[1],[2],[3]];     //第i项表示,长度为i绳子的最大乘积组合
    for (var i=4;i<=n;i++){
        a[i] = 0;    //初始化
        for (var j=1;j<= n/2;j++){  //循环找出最大乘积及组合并分别记录在a,b数组中
            if (a[j]*a[i-j] >a[i]){  
                a[i] = a[j]*a[i-j];
                b[i] = [...b[j], ...b[i-j]];
            }
        }
    }
    console.log(a[n]);  //输出长度为n的绳子最大乘积
    console.log(b[n]);   //输出长度为n的绳子最大乘积时的划分组合
}
054_小驰私房菜_Camx i2c读写相关备忘 Camera 对Ae、Af这些控制,实际都是,最终实际都是落实到hal下发相关的指令给驱动,那hal这边是怎么给驱动下发相关命令的呢?#小驰私房菜054# #Qcom Camx#可以参考看下下面相关代码内容。 阅读详情

相关推荐

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2258

割绳子

分治法 遍历所有的情况,求最大值。 公式就是f(n,m) = f(n-i,m-1)*i 每次递归只需要考虑这一次递归的i的值,然后进行下一次。 数学法 这几个数越平均,结果就越大 /* * 给定一段长度为n的绳子,剪成m段,求其最大乘积 * */ public class Work6 { public Work6(){ System.out.println( maxPro...

weixin_45980031的博客 468

工业级以太网通信实战:用FPGA驱动YT8531 PHY芯片的完整避坑指南

本文是一份针对工业级以太网通信的实战指南,详细讲解了如何使用FPGA驱动YT8531 PHY芯片。内容涵盖从硬件设计(电源、时钟、复位)到MDIO接口驱动开发、PHY配置与链路管理的全流程,并重点剖析了十个常见的开发“陷阱”及其解决方案,旨在帮助工程师在复杂的工业环境中实现稳定可靠的以太网通信连接。

weixin_29191669的博客 146

【js算法】贪心----剪绳子(一看就懂)

【贪心算法的思想】 在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解最优解。 【题目】 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 【思路】 利用均值不等式求得 将绳子分成

qq_41409353的博客 891

IDEA 2023最新破解教程:从安装到永久激活(附常见问题解决方案)

本文为Java开发者提供了一份详尽的IntelliJ IDEA 2023高效使用指南。内容涵盖从版本选择、安装配置到核心快捷键、项目依赖管理、高级调试测试以及插件生态的深度优化。旨在帮助用户在合法合规的前提下,充分发挥这款顶级IDE的潜力,显著提升Java开发效率与工作体验。

time3的博客 3367

SIwave串扰分析保姆级教程:从Allegro文件导入到结果解读,手把手教你排查PCB信号问题

本文提供SIwave串扰分析的详细教程,从Allegro文件导入到结果解读,手把手教你排查PCB信号问题。涵盖环境准备、参数配置、串扰扫描技巧及实战案例,帮助工程师精准定位和解决高速PCB设计中的串扰问题,提升信号完整性分析能力。

weixin_42620913的博客 256

牛客网-剑指offer[编程题]剪绳子 js详解

这个题的意思就是把绳子尽量分成由2和3组成的小部分 如果绳子长度为偶数,就全部分为由n*2组成 如果绳子长度为奇数,就全部分为由(n-1)2组成+13组成 function cutRope(number) { // write code here if(number == 2) return 1; if(number == 3) return 2; if(num...

kotoriyou的博客 421

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

切绳子(含五种二分做法)

切绳子(二分答案模板题)

北边一颗小星星 1444

PostgreSQL:Patroni 高可用架构,基于etcd的自动故障转移集群

本文详细介绍了基于Patroni和etcd构建PostgreSQL高可用集群的方案。Patroni作为外部守护进程,通过etcd分布式协调服务实现自动故障转移、主节点选举等关键功能,弥补了PostgreSQL原生缺乏自动故障转移的不足。文章涵盖核心架构(3节点PG+3节点etcd)、环境规划、etcd集群部署(包括配置验证)以及Patroni安装配置的关键步骤,特别强调了Patroni自动初始化PG实例、配置同步复制等生产级特性。该方案通过外部组件协同工作,在不修改PG源码的情况下实现了生产环境所需的高可用

数据知道的博客 2490

深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践

在异构计算领域,Zynq-7000系列SoC的AMP(Asymmetric Multiprocessing)模式堪称多核编程的瑞士军刀。独立运行环境:CPU0运行Linux,CPU1运行FreeRTOS或裸机程序硬件资源独占:CPU0管理DDR,CPU1使用OCM(片上内存)中断隔离:默认所有中断路由到CPU0这种架构非常适合需要实时响应的工业控制系统——比如用CPU0处理网络通信,CPU1负责电机控制。AMP模式下中断路由的底层原理多维度性能优化技巧工业级可靠性的实现方案。

QQ_778132974的博客 492

剑指offer:js实现剪绳子

题目:给你一根长度为n的绳子,请剪成m段n>1,m>1,使剩下的绳子乘积为最大值. 例:8 => 2 * 3 * 3 = 18 思路:动态规划,比如8,第一次切割可以分成8-1种切法,将最优解存储起来。 let n = 8; function cut(){ let res = [0,1,2,3]; return function(n){ if(n&...

李常常查德的博客 446

通信原理 | 随机数仿真 | 均匀、正态、双高斯、瑞利、莱斯、对数正态、nakagami、Suzuki分布的随机数仿真(matlab)

信道建模在通信系统设计和分析中扮演着至关重要的角色。它指的是使用数学和物理模型来描述和模拟无线或有线通信路径中的信号传播特性。

若北辰 1986

剑指 offer14-I. 剪绳子 -- 动态规划 js版

js版动态规划解决剪绳子问题。

Celine921的博客 298

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

剑指 Offer 14- I. 剪绳子 JavaScript实现

剑指 Offer 14- I. 剪绳子 JavaScript实现题目描述 题目描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 var cuttingRope = function(n) { var dp = new A

ryyzxf的博客 2715

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

剑指Offer——剪绳子II(JS实现)

题目描述 解题思路 本题与《剪绳子I》这个题目本质是一样的,但是区别在于,本题加大了数字范围需要对答案进行取模1000000007,但是我们在调用Math.max函数的时候,里面不能有BigInt类型,所以我们必须自己实现Max函数,本题采用的是排序的方式求出最大值,但是排序的写法有讲究,具体看下面的解题代码 解题代码 var cuttingRope = function(n) { // 本题可以采用动态规划的思想 // 动态规划的结束条件是dp[2] = 1 代表的含义是长度为2的

Always-Learning 445

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JavaScript / TypeScript for LeetCode (118)

是差点运气,可我一直在努力! 当前进程: 开始时间:2020.6.27 结束时间:undefined GitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode 1、题目要求 ( 剑指 Offer 14- I ) 剪绳子 2、解题思路 方法:最优化问题 – 动态规划 1、状态:dp[i] 表示将正整数 ii 拆分成至少两个正整数的和之后,这些正整数的最大乘积。 2、状态转移方程:当 j 固定时,有 dp[i]

weixin_47771057的博客 130

offer 14 i/ ii剪绳子/动态规划

题目 https://leetcode-cn.com/problems/jian-sheng-zi-lcof/ 方法一:动态规划 时间O(n^2) 空间O(n) java class Solution { public int cuttingRope(int n) { int[] dp = new int[n+1]; for(int i = 2; i <= n; i++){ for(int j = 1; j <= i-1; j+

qq_35482765的博客 231

《剑指 Offer (第 2 版)》动态规划部分 JavaScript 题解

《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这 5 个面试要点。 最近,把**动态规划**部分的题刷完了。本文来分享下这些题的解法...

p1967914901的博客 525

剑指Offer-数学部分

剑指Offer-数学部分剪绳子解题思路1解题思路2剪绳子 II打印从1到最大的n位数解题思路1解题思路2表示数值的字符串解题思路1解题思路21~n 整数中 1 出现的次数解题思路数字序列中某一位的数字解题思路丑数解题思路1解题思路2 剪绳子 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分

JIMJJU的博客 1087

剪绳子 --- 剑指Offer

剪绳子 给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。 每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少? 例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。 样例 输入:8 输出:18 思路 把一个正整数 N 拆分成若干正整数,只有有限种拆法N...

WRian_Ban的小晴天 242

LeetCode 剑指 Offer 14- I. 减绳子(动态规划)—— JavaScript

题链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/ 题描述: 解题思路: 当绳子长度为 2 或 3 时,直接返回 n -1: 2 = 1 + 1 = 1 * 1 = 1,3 = 1 + 2 = 1 * 2 = 2。 当绳子长度大于等于4时,利用数组 dp 保存当前绳子的最大乘积,即 dp[i] 表示长度为 i 的绳子拆分的最大乘积。 代码实现: /** * @param {number} n * @return {num.

ySFRaabbcc的博客 272

Python-剑指Offer(八):动态规划解决剪绳子问题

动态规划问题 根据已知当绳子分段为f(2)时,返回1。当绳子分段为f(3)时,返回2。 设置最大结果存储数组max_array用于存储f(n)-&gt;max_array[n]此时能取到的最大值,之后利用指针p对数组进行切分,一切为2。最大值赋值给max_array[n] def cut_rope(n): if n &lt; 2: return 0 if n == ...

Nku_dong 1413

[剑指-Offer] 14. 剪绳子I、剪绳子II(数学、动态规划、贪心、代码优化)

文章目录1. 题目来源2. 题目说明3. 题目解析方法一:动规解法方法二:数学、贪心、代码优化 1. 题目来源 链接:剪绳子I、剪绳子 II 来源:LeetCode——《剑指-Offer》专项 2. 题目说明 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n 都是整数,n>1 并且 m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[...

Y-puyu 的博客 590

剑指offer-js 剪绳子

剪绳子 题目描述: 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n), 每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时, 我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 输入描述: 输入一个数n,意义见题面。(2 <= n <= 60) 输出描述: 输出答案。 示例1 输入 8 输出 18 问题分析: 动态规划的

baobaohui 425

剑指 Offer 14- I—剪绳子

剪绳子

qq_39172845的博客 6878
上一篇: 圣杯布局和双飞翼布局
下一篇: 散列表
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值