题目

给一根长度为n的绳子,请把绳子剪成m段(m,n都是整数且1),每段绳子的长度相乘最大乘积是多少?如绳子长度为8,当分别为2,3,3时,此时最大乘积18

思路1

此问题明显包含独立的子问题,用f(n)表示长度为n的绳子剪完后的最大乘积,则可以写出递推公式

f(n) = max{f(n-i) × f(i)}, 0 < i < n

因为自下而上的时间复杂度为O(n), 每次递推时要对i循环O(n) ,所以时间复杂度是O(n2)

我们对长度为8的绳子进行模拟。

f(4) = f(2) * f(2) = 4;

f(5) = f(2) * f(3) = 6;

f(6) = f(3) * f(3) = 9;

f(7) = f(3) * f(4) = f(2) * f(5) = 12;

f(8) = f(3) * f(5) = 18;

int maxProAfterCutting(int length){if (length < 2) return 0; //题目说大于1,因此这是异常输入if (length == 2)return 1;if (length == 3)return 2;int* products = new int[length + 1];products[0] = 0;products[1] = 1;products[2] = 2;products[3] = 3;  //其实是从product[4]开始算,这里是为了计算,当输入0 1 2 3时,前面已经处理int max = 0;for (int i =4; i <= length; i++){max = 0;for (int j = 1; j <= i / 2; j++){int product = products[j] * products[i-j];if (max < product)max = product;products[i] = max;}}max = products[length];delete[] products;return max;
}

思路2

贪心算法:

当n = 4时,最大乘积就是4.

当n >= 5时,尽可能多剪长度为3的绳子,当剩下为4的时候,就剪成两段2

也就是说,n>=5时,最大乘积都由若干个3,最多两个2构成的

证明很简单:

n >= 5时,3(n-3) >= 2(n-2) > n

转载于:https://www.cnblogs.com/shiganquan/p/9289984.html

【剑指offer】14、剪绳子相关推荐

  1. 【LeetCode】剑指 Offer 14. 剪绳子

    [LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...

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

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

  3. 【LeetCode笔记】剑指 Offer 14. 剪绳子 I II(Java、动态规划、偏数学)

    文章目录 剪绳子 I 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n) 2. 最优解:数学方法 O(n).O(1) 二刷 剪绳子 II 题目描述 思路 &am ...

  4. 剑指 Offer 14- II. 剪绳子 II

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

  5. 剑指Offer 14- I. 剪绳子(Medium)/ 剪绳子 II(Medium)/ 343. 整数拆分(Medium)

    剑指Offer 14- II. 剪绳子 II(Medium) 343. 整数拆分(Medium) [题目连接] 题解 剪绳子(数学推导 / 贪心思想,清晰图解) 图解[暴力递归][记忆化技术][动态规 ...

  6. 【剑指offer】剪绳子(动态规划)

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

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

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

  8. 剑指offer:剪绳子

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

  9. 剑指Offer:剪绳子(动态规划、贪婪算法)

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

  10. 88. Leetcode 剑指 Offer 14- I. 剪绳子 (动态规划-基础题)

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

最新文章

  1. PC 时代旧神隐没,互联网的新二十年开始了
  2. homebrew的安装和使用
  3. 算法学习的链接(持续更新)
  4. java object.getclass_Java Object getClass() 方法
  5. sed 插入多行_Linux三剑客之sed
  6. C语言 函数值传递和址传递 - C语言零基础入门教程
  7. angularjs学习:事件
  8. DPDK初始化分析(二)
  9. 贴片铝电容识别及型号_贴片式铝电解电容常用型号封装
  10. url在传递的过程中要先进行一个转码,然后再进行解码,url的转码,url的解码
  11. 发红包的程序代码java_Java实现微信发红包
  12. 在Mac电脑中轻松打开终端程序的快捷方法
  13. COGS461. [网络流24题] 餐巾
  14. web性能测试基础(一)
  15. wow服务器合并信息,《魔兽世界》一区合并服务器正式通告
  16. Python学习week4-python元组与字符串
  17. 杰理烧录器驱动安装失败
  18. 怎么入驻印象淘宝短视频 申请通过印象淘宝条件要求
  19. kali2020 vnc安装,在Kali Linux 2020.x上安装和卸载VLC媒体播放器的方法
  20. Fundamentals of Computer Graphics, Fourth Edition 中文翻译

热门文章

  1. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
  2. Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
  3. 【C#实践】三层实例:登录过程
  4. view(*args)改变张量的大小和形状_pytorch reshape numpy
  5. BERT-Pytorch demo初探
  6. 正则表达式 - 语法
  7. MLIR Python绑定
  8. NVIDIA数据中心深度学习产品性能
  9. 自动驾驶感知系统盘点
  10. Python:数据导入、爬虫:csv,excel,sql,html,txt