题目描述

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

解题思路

  1. 找规律
链接:https://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8?f=discussion
来源:牛客网/*** 题目分析:* 先举几个例子,可以看出规律来。* 4 : 2*2* 5 : 2*3* 6 : 3*3* 7 : 2*2*3 或者4*3* 8 : 2*3*3* 9 : 3*3*3* 10:2*2*3*3 或者4*3*3* 11:2*3*3*3* 12:3*3*3*3* 13:2*2*3*3*3 或者4*3*3*3** 下面是分析:* 首先判断k[0]到k[m]可能有哪些数字,实际上只可能是2或者3。* 当然也可能有4,但是4=2*2,我们就简单些不考虑了。* 5<2*3,6<3*3,比6更大的数字我们就更不用考虑了,肯定要继续分。* 其次看2和3的数量,2的数量肯定小于3个,为什么呢?因为2*2*2<3*3,那么题目就简单了。* 直接用n除以3,根据得到的余数判断是一个2还是两个2还是没有2就行了。* 由于题目规定m>1,所以2只能是1*1,3只能是2*1,这两个特殊情况直接返回就行了。** 乘方运算的复杂度为:O(log n),用动态规划来做会耗时比较多。*/
class Solution {
public:int cutRope(int number) {if(number==2) return 1;if(number==3) return 2;int x=number%3;int y=number/3;if(x==0) return pow(3, y);else if(x==1) return pow(3,y-1)*2*2;else return pow(3,y)*2;}
};
  1. 动态规划
/*
动态规划求解问题的四个特征:
①求一个问题的最优解;
②整体的问题的最优解是依赖于各个子问题的最优解;
③小问题之间还有相互重叠的更小的子问题;
④从上往下分析问题,从下往上求解问题;
*/
class Solution {
public:int cutRope(int number) {if (number < 2)return 0;if (number == 2)return 1;if (number == 3)return 2;int* products = (int*)malloc((number + 1)*sizeof(int));//assert(products != NULL);memset(products, 0, (number + 1)*sizeof(int));/****长度为1、2、3、4的绳子的最大积********/products[0] = 0;products[1] = 1;products[2] = 2;products[3] = 3;int max = 0;int i = 0;int j = 0;for (i = 4; i <= number; i++){max = 0;for (j = 1; j <= i / 2; j++){int product = products[j] * products[i - j];if (max < product)max = product;products[i] = max;}}max = products[number];free(products);products = NULL;return max;}
};

剑指offer:剪绳子相关推荐

  1. python剑指offer剪绳子

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

  2. 《剑指offer》c++版本 14.剪绳子

    本题在牛客网剑指offer专项里没看到,原书第二版上有,如题: 这道题是开放的动态规划题,题目中只给了绳子长度,却没定义具体剪多少段,初遇此题,难以下手,看了题解,豁然开朗.设f(n)为常为n的绳子剪 ...

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

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

  4. 【LeetCode】【剑指offer】【剪绳子(二)】

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

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

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

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

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

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

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

  8. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  9. 剑指offer(60-67题)详解

    文章目录 60 把二叉树打印成多行 61 序列化二叉树 62 二叉搜索树第K个节点 63 数据流中的中位数 64 滑动窗口的最大值 65 矩阵中的路径 66 机器人的运动范围 67 剪绳子 欢迎关注个 ...

  10. 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

    Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...

最新文章

  1. 调整表格的行高_Word表格无法调整行高?尽然是这个原因,90%的人都可能遇到...
  2. 路易斯安那州立大学计算机科学,西北路易斯安那州立大学
  3. Azure系列2.1.13 —— CloudBlockBlob
  4. SAP Spartacus user form页面的css设计重构
  5. 原版英文书籍《Linux命令行》阅读记录1 | 什么是shell?
  6. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
  7. 为什么要先装IIS后装.Net Framework?
  8. 特斯拉上海工厂开工 Model 3月销量有望破万
  9. arduino控制点阵屏与蜂鸣器_还在为遥控项目发愁?Arduino遥控套装解决你的所有问题(下)...
  10. php5中使用xslt扩展,.NET_解析在.net中使用XSLT转换xml文档的示例详解,XSL即可扩展的样式表文件。 可 - phpStudy...
  11. vb连接mysql数据库报错_vb6连接mysql数据库
  12. assimp android build,Android assimp编译及引用
  13. c语言转换字符类型,C语言基础之数据类型转换
  14. SAP系统开发时查询库存的方…
  15. 图片过大怎么办?如何把图片压缩到最小
  16. winin10怎么锁定计算机,win10系统下设置电脑固定ip地址的方法
  17. ubuntu server 14.04 编译安装xen4.4.2配置vtpm(二)——Dom0内核编译
  18. 随记:普遍性验证、数学思维、代数基本定理及其它
  19. 第0章 计算机硬件与组成基础
  20. eclipse中创建spring boot项目

热门文章

  1. 22.2. 表管理(Table)
  2. 后台开发之IO缓冲区管理
  3. redis集群之REDIS CLUSTER
  4. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
  5. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序
  6. NSUserDefaults读取和写入自定义对象
  7. mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
  8. qt向服务器传输文字_Qt 模拟 HTTP 表单提交文字或文件到服务器
  9. java pagemodel,Java PageModel
  10. 算法-判断一颗树是否是搜索二叉树