文章目录

  • 题目描述
  • 动态规划求解
  • 求解代码
  • 贪心法求解
  • 求解代码

题目描述

给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

牛客网题目链接

动态规划求解

我们定义函数 f ( n ) f(n) f(n)为把长度为n的绳子剪成若干段后乘积的最大值

则 f ( n ) = m a x ( f ( i ) − f ( n − i ) ) f(n)=max(f(i)-f(n-i)) f(n)=max(f(i)−f(n−i)):

  • 把长度为n的绳子剪为长度为i和长度为n-i的两端,然后再求子问题 f ( i ) f(i) f(i)和 f ( n − i ) f(n-i) f(n−i)(i=1,2,...,n-1)

即:一个问题可以分解为子问题,要使得该问题最优,则子问题先要实现最优,因此我们可以使用动态规划的思路去求解

原问题从上到下使用递归法求解,动态规划的核心是填表,先求解子问题,然后自下而上求解,最终得到原问题的解

求解代码

class Solution {public:int cutRope(int number) {if(number<4)return number;else{int *tab =new int[number+1];//表格数组int i,j;//以下为填表过程tab[0]=0;tab[1]=1;tab[2]=2;tab[3]=3;for(i=4;i<=number;i++){tab[i]=0;for(j=1;j<=i/2;j++){if(tab[i]<tab[j]*tab[i-j])tab[i]=tab[j]*tab[i-j];}}return tab[number];//表中最后一个即为所求}}
};
运行时间:3ms占用内存:608k

贪心法求解

尽可能地剪出长度为3的子段,但当最后一段所剩长度为4时,将其剪为2*2的两段落,因为2*2 > 3*1

PS:关于为何剪为3的子段的数学证明博主还没有想到如何用通俗易懂的方式讲解(可参考《剑指Offer》),欢迎大佬留言指教

求解代码

class Solution {public:int cutRope(int number) {if(number<5)return number;if(number%3==1)return pow(3,number/3-1)*4;elsereturn pow(3,number/3)*pow(2,(number%3)/2);}
};
运行时间:3ms占用内存:608k

剪绳子的几种解法 — C++实现相关推荐

  1. 【剑指Offer】剪绳子问题——四种解法

    剪绳子问题--四种解法 题目描述: 输入描述: 返回值描述: 示例1: 解题思路: 方法1:暴力递归 方法2:记忆化递归 方法三:动态规划 方法四,数学原理 题目描述: 给你一根长度为n的绳子,请把绳 ...

  2. 剑指 Offer 14- I. 剪绳子(5种方案)

    https://leetcode-cn.com/problems/jian-sheng-zi-lcof/ 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m ...

  3. 剪绳子 算法_[校招-算法题]动态规划

    动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...

  4. 动态规划-剪绳子问题

    题目 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],-,k[m-1].请问k[0]×k[1]×-×k[m]可能 ...

  5. 剪绳子(动态规划、贪心算法)

    一.前言 <剑指Offer>中题14 二.题目 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[ ...

  6. 【算法】【动态规划篇】第5节:剪绳子问题

    本期任务:介绍算法中关于动态规划思想的几个经典问题 [算法][动态规划篇]第1节:0-1背包问题 [算法][动态规划篇]第2节:数字矩阵问题 [算法][动态规划篇]第3节:数字三角形问题 [算法][动 ...

  7. NOJ——1672剪绳子(博弈)

    [1672] 剪绳子 时间限制: 500 ms 内存限制: 65535 K 问题描述 已知长度为n的线圈,两人依次截取1~m的长度,n, m为整数,不能取者为输. 输入 输入n, m:( 0 < ...

  8. LeetCode-剑指 Offer 14- I. 剪绳子

    思路一:动态规划 1:首先我们想要求长度为n的绳子剪掉后的最大乘积,可以从前面比n小的绳子转移而来 2:用一个dp数组记录从0到n长度的绳子剪掉后的最大乘积,也就是dp[i]表时长度为i的绳子剪成m段 ...

  9. 剑指 Offer 14.剪绳子(动态规划、数学分析)

    一.题目内容 二.题目分析 这道题目讲道理,我看到的第一眼就是动态规划,但是后来提交之后,发现还有大佬考虑用数学分析得出精简解法,在这里我也会一 一阐述. 对于动态规划而言,按照老套路,首先定义dp数 ...

最新文章

  1. 【舒工强烈推荐】命令添加Git远程仓库
  2. LeetCode-剑指 Offer 13. 机器人的运动范围
  3. 可视化神器背后的奥秘
  4. laravel redis_Redis 之服务器集群配置
  5. Excel里,vlookup函数各种应用-匹配多列、多条件匹配
  6. stream iterators源代码详解
  7. go语言ATM小案例
  8. 西门子S7-1200控制伺服/步进电机方法与接线(全)
  9. 魔兽世界稳定服务器,魔兽世界美服服务器趋于稳定 排队新技术将实装
  10. 火箭双杀尼克斯 哈林组合和砍50分
  11. 用户态和内核态的切换耗费时间的原因
  12. 2022全新直播短视频系统源码+附教程/可二开可采集
  13. 数据预处理:分类和顺序变量转化为数值型数据
  14. 《途客圈创业记:不疯魔,不成活》一一2.4 与iWeekend再续前缘
  15. Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码)
  16. 【Unity】Unity 2D游戏开发(三)2D游戏常用功能及插件
  17. 详解ArcGIS (Pro)面积制表(区域制表)参数设置及报错处理
  18. 蓝桥杯赛前真题 Python组 Day 4
  19. 群晖NAS用迅雷远程下载Xware 1.xxx的进程监视和掉线自动重启
  20. PS2手柄模控制ESP32控制舵机 ArduinoPWM控制

热门文章

  1. tensorflow用pretrained-model做retrain
  2. 20180928 SQL SERVER 事务回滚
  3. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.5 标准信号槽
  4. 计算机机房kvm系统配件,机房KVM管理系统
  5. 继所有人咒骂后的一篇
  6. Tomcat启动项目慢
  7. 蓝牙(Bluetooth)---源码目录及设置应用源码分析
  8. Linux学习笔记---Vim教程
  9. Boosted Tree
  10. 计算机二级考试题库office题型,全国计算机二级office考试题型分析