### 剪绳子一

利用动态规划

状态转移方程

为啥是这个样子?首先

 代表 长度为i的绳子被剪去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<number+1;++i) memo[i]=-1;
return dp(number); }
//递归+memo
int dp(int number)
{
if(number<2) return 0;
if(number==2) return 1;
if(number==3) return 2;
if(memo[number]!=-1) return memo[number];
int res = -1;
//从1开始剪!
for(int i=1;i<number;++i)
{
int dp_i = max(dp(number-i)*i,(number-i)*i);
res = max(res,dp_i);
}
memo[number] = res;
return memo[number];
}

### 剪绳子二

绳子长度范围增加,导致结果必须要对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<div;++i)
{
if(i<div-1)
{
res*=3;
}
else
{
if(rem==2)
{
res=res*(rem*3);
}
else
{
res *= (rem+3);
}
}
res = res % 1000000007; }
return res;
}

leetcode 剪绳子系列的更多相关文章

  1. 【剑指offer】面试题 14. 剪绳子

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

  2. 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划

    Leetcode组合总和系列--回溯(剪枝优化)+动态规划 组合总和 I 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...

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

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

  4. 【Java】 剑指offer(13) 剪绳子

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n> ...

  5. 《剑指offer》第十四题(剪绳子)

    // 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...

  6. 剑指offer——面试题14:剪绳子

    // 面试题14:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1 ...

  7. 【Python】剑指offer 14:剪绳子

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

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

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

  9. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

    目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...

随机推荐

  1. C# 在PPT中添加数学公式

    本次内容介绍在C#程序中给PPT幻灯片添加Latex数学公式,添加公式前,首先需要在幻灯片中插入一个Shape形状,在形状的段落中通过方法Paragraphs.AddParagraphFromLate ...

  2. CF204E-Little Elephant and Strings【广义SAM,线段树合并】

    正题 题目链接:https://www.luogu.com.cn/problem/CF204E 题目大意 \(n\)个字符串的一个字符串集合,对于每个字符串求有多少个子串是这个字符串集合中至少\(k\ ...

  3. vue成就购物城的功能 (展示增删改查)

    <!DOCTYPE html><html> <!DOCTYPE html> <html> <head> <meta charset=& ...

  4. C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑

    C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...

  5. Spring Boot 整合单机websocket(附github源码)

    websocket 概念 websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信.websocket 连接成功后,服务端和客户可以进行双向通信.不同于 http 通信协议需要每次由客 ...

  6. HBase 与 Cassandra 架构对比分析的经验分享

    架构对比 HBase和Cassandra几乎是一个年份发起,又都是在2010年成为Apache的顶级项目,不过如果我们去细品其内部机制,我们会发现其实两者是完全不同的架构风格. HBASE起源于Goo ...

  7. java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端

    通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...

  8. Python异常代码含义对照表

    Python常见的异常提示及含义对照表如下: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是 ...

  9. 浏览器有别_HTTP报文的回车换行

    本来以为浏览器HTTP报文的生成应该是完全一致的.但最近在做一个项目的时候,发现Safari和Chrome提交同一份表单,后端的处理结果不一致.看提交结果呢,是因为Safari多了个回车.由于原项目的 ...

  10. 8.5(337)——树形dp

    将题目进行翻译,就是遍历二叉树算出最大权值,在遍历过程中,不能同时选择两个相连的节点. 第一种子问题的构造,是以爷爷--父亲--孙子的"三代"节点一同构造的,将最优子问题的结构定义 ...