leetcode 剪绳子系列

### 剪绳子一

利用动态规划

状态转移方程 F(i) = max((i-j)*j,F(i-j)*j)

为啥是这个样子?首先

F(i-j)*j 代表 长度为i的绳子被剪去j,且继续剪(子问题)

(i-j)*j 表示长度为i的绳子被剪去j,不剪了的乘积

注意初始化:

n<2 f=0

n==2 f = 1(因为可以分为1 * 1)

n==3 f = 2(因为可以分为1*2)

两种方式:

  1. 递归+备忘录(不用备忘录超时,去除重复子问题)
  2. dp数组 dp[i]= max(dp[i],max(dp[i-j]*j,(i-j)*j)))
    class Solution {
public:int *memo;int cutRope(int number) {memo = new int[number+1];for(int i=0;i

### 剪绳子二

绳子长度范围增加,导致结果必须要对1000000007求余,而求余过程导致动态规划失效,因此使用数学推导

class Solution {
public:int cuttingRope(int n) {// memo = new int[n+1];// for(int i=0;i<=n;++i) memo[i] = -1;// return dp(n);if(n<2) return 0;if(n==2) rerurn 1;if(n==3) return 2;int div = n / 3;int rem = n % 3;long res = 1;for(int i=0;i


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章