leetcode 剪绳子系列
### 剪绳子一
利用动态规划
状态转移方程
为啥是这个样子?首先
代表 长度为i的绳子被剪去j,且继续剪(子问题)
表示长度为i的绳子被剪去j,不剪了的乘积
注意初始化:
n<2 f=0
n==2 f = 1(因为可以分为1 * 1)
n==3 f = 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 剪绳子系列的更多相关文章
- 【剑指offer】面试题 14. 剪绳子
面试题 14. 剪绳子 LeetCode 题目描述 给你一根长度为 n 的绳子,请把绳子剪成 m 段(m.n 都是整数,n>1 并且 m>1),每段绳子的长度记为 k[0],k[1],·· ...
- 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划
Leetcode组合总和系列--回溯(剪枝优化)+动态规划 组合总和 I 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...
- 剑指 Offer 14- II. 剪绳子 II
剑指 Offer 14- II. 剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]... ...
- 【Java】 剑指offer(13) 剪绳子
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n> ...
- 《剑指offer》第十四题(剪绳子)
// 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...
- 剑指offer——面试题14:剪绳子
// 面试题14:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1 ...
- 【Python】剑指offer 14:剪绳子
题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],-,k[m].请问k[0]k[1]-*k[m]可能的最大乘积是多少 ...
- NOJ——1672剪绳子(博弈)
[1672] 剪绳子 时间限制: 500 ms 内存限制: 65535 K 问题描述 已知长度为n的线圈,两人依次截取1~m的长度,n, m为整数,不能取者为输. 输入 输入n, m:( 0 < ...
- C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...
随机推荐
- 执行sudo apt-get update,连接失败
问题:sudo apt-get update连接失败 错误:1 http://cn.mirrors.ustc.edu.cn/ubuntu bionic InRelease 连接失败 [IP: 218. ...
- JAVA-java内存分配
二.java-class的内存分配 三.JAVA string类特别之处 String 通过构造方法创建是在堆内存中, 通过直接赋值对象是在方法区的常量里 四.字符串做拼接 非常耗时和浪费内存的原因 ...
- Vue组件间的数据传输
1.父组件向子组件传输数据:自定义属性 1 //父组件 2 <Son :msg="message" :user="userinfo"></So ...
- Idea生成JavaDoc文档
什么是JavaDoc javadoc是Sun公司提供的一个技术 它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档 实现方式 命令行方式 javadoc -encoding ...
- display:none、visibility:hidden,opacity:0三者区别
1. display:none 设置display:none,让这个元素消失 消失不占据原本任何位置 连带子元素一起消失 元素显示:display:block 2. visibility:hidden ...
- MacOS下Java与JDK关系与相关路径
MacOS下Java与JDK关系与相关路径 macOS下的Java与JDK的路径曾经困扰过我一段时间,今天稍有些忘记,故记下笔记,整理一下.Java与JDK的关系不在本文笔记之内,Javaer常识. ...
- Linux7安装redis6
首先下载软件包并解压 cd /opt wget https://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5. ...
- 技术番外篇丨Github Action CI/CD
起源 看到.Net群里再聊CI/CD,我就这里分享一下我目前自己一些小东西的做法,我目前在Github有一个自己私有的组织,里面存放了我的部分商业化项目,早期我采用Jenkins用Webhooks进行 ...
- Java课堂测试1第三阶段
package sizeyunsuan;//import java.util.Scanner;//import java.util.Random;import java.util.*; public ...
- Java初步学习——2021.09.24每日总结,第三周周五
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学了将数组传递给方法和方法返回数组,其中传递的是数组的引用. 明天把例子做了,尽量把查找也学习了. 遇到了两个问题: 1 ...