一、题目

二、思路

(1)确定状态
dp[i]是将正整数i拆成2个及其以上的正整数后,求所有数的乘积值。

(2)状态转移方程
当 i≥2 时,假设对正整数 i 拆分出的第一个正整数是 j(1≤j<i),则有以下两种方案:
1)将 i 拆分成 j 和 i−j 的和,且 i−j 不再拆分成多个正整数,此时的乘积是 j×(i−j);
2)将 i 拆分成 j 和 i−j 的和,且 i−j 继续拆分成多个正整数,此时的乘积是 j×dp[i−j]。
因此,当 j 固定时,有 d p [ i ] = m a x ( j × ( i − j ) , j × d p [ i − j ] ) dp[i]=max(j×(i−j),j×dp[i−j]) dp[i]=max(j×(i−j),j×dp[i−j])由于 j 的取值范围是 1 到 i−1,需要遍历所有的 j 得到 dp[i] 的最大值,因此可以得到状态转移方程如下: d p [ i ] = max ⁡ 1 ≤ j < i ( j × ( i − j ) , j × d p [ i − j ] ) d p[i]=\max _{1 \leq j<i}(j \times(i-j), j \times d p[i-j]) dp[i]=1≤j<imax​(j×(i−j),j×dp[i−j])

最终得到 dp[n] 的值即为将正整数 n 拆分成至少两个正整数的和之后,这些正整数的最大乘积。

(3)边界+初始条件
边界条件: 0 不是正整数,1 是最小的正整数,0 和 1 都不能拆分,因此 dp[0]=dp[1]=0。

(4)计算顺序
从小到大。

三、C++代码

class Solution {public:int cuttingRope(int n) {vector<int>dp(n + 1);for(int i = 2; i <= n; i++){for(int j = 1; j < i; j++){dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));}}return dp[n];}
};

【LeetCode343】剪绳子(动态规划)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 剪绳子(动态规划和贪婪算法)

    题目: 把长度为n的绳子剪成m段(n>1,m>1),每段绳子的长度记为k[1],...k[m],则每段绳子的长度的最大乘积是多少?例如身子长度为8时,剪成2,3,3三段得到的乘积最大,为1 ...

  9. 12、剪绳子——剑指offer——动态规划

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

  10. 动态规划贪婪算法之剪绳子

        动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决. 1. 可以使用动态规划的情形: (1)在应用动态规划之前,要分析能否把大问题分解成小问 ...

最新文章

  1. select报错 spark_使用spark-sql报错 “Metastore contains multiple versions”
  2. Java常用类(5)--不可变的任意精度BigInteger、BigDecimal类
  3. 两个excel文档查找相同选项后替换_看似普通的查找和替换功能,用好了,能让你的工作效率翻一番...
  4. clickhouse 查询优化_查询提升200倍,ClickHouse你值得拥有!
  5. ESP定律手工脱壳步骤
  6. Oracle JET Model 数据获取与使用
  7. Mybatis自动去重
  8. H5实现点击图片放大功能
  9. [Windows批处理]清除IE缓存
  10. 使用PS旋转单个图层
  11. 康托尔定理是怎样证明的?
  12. 一个VC编写的虚拟桌面软件
  13. [thrift] thrift基本原理及使用
  14. 汇编语言:8421 BCD码加减法的修正问题
  15. java基础—综合练习
  16. java ctor_vue-test-utils设置获取TypeError:无法在字符串上创建属性'_Ctor'
  17. 学3D建模要注意什么问题?入行好几年,踩过的坑后的经验
  18. Java如何从键盘中进行输入
  19. 我将进化成一条狗(3)——区块链
  20. 【报错】date: invalid date ‘2 days ago+%Y%m%d‘

热门文章

  1. 推送系统从0到1(八):个性化精准推送的实现
  2. java的OpenGL学习资料
  3. 扫盲-----addEventlistener()方法,事件监听(一)
  4. Net2 A Graph Attention Network Method
  5. IDEA新建项目需要新建好文件夹
  6. UAP开发中遇到的问题
  7. Django项目127.0.0.1 拒绝了我们的连接请求。
  8. Python三维地址建模教程【Gempy】
  9. 蓝牙耳机南卡和JBL哪款好用?半入耳耳机南卡和JBL详细对比评测
  10. 零基础自学Java路线总结,有效利用网络各机构课程资源