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 + ...
随机推荐
- python在iis获取header
#print os.environ['QUERY_STRING']#print os.environ['HTTP_HOST'] #print '---------------------------- ...
- centos7 .net core 使用supervisor守护进程后台运行
安装supervisor yum install supervisor 配置supervisor vi /etc/supervisord.conf 拉到最后,这里的意思是 /etc/superviso ...
- P2350-[HAOI2012]外星人【线性筛】
正题 题目链接:https://www.luogu.com.cn/problem/P2350 题目大意 给出\(N\)质因数分解之后的结果,求每次\(N=\varphi(N)\),多少次后\(N=1\ ...
- 推荐一款 Python 微服务框架 - Nameko
1. 前言 大家好,我是安果! 考虑到 Python 性能及效率性,Python Web 端一直不温不火,JAVA 和 Golang 的微服务生态一直很繁荣,也被广泛用于企业级应用开发当中 本篇文章 ...
- AtCoder Beginner Contest 221 A~E题解
目录 A - Seismic magnitude scales B - typo C - Select Mul D - Online games E - LEQ 发挥比较好的一场,就来搓篇题解. F ...
- C++核心编程 4 类和对象-封装
C++面向对象的三大特性:封装.继承.多态 C++认为万事万物皆为对象,对象上有其属性和行为 封装 意义:1.将属性和行为作为一个整体,表现生活中的事物 语法: class 类名{ 访问权限:属性 ...
- Miller-Rabin and Pollard-Rho
实话实说,我自学(肝)了两天才学会这两个随机算法 记录: Miller-Rabin 她是一个素数判定的算法. 首先需要知道费马小定理 \[a^{p-1}\equiv1\pmod{p}\quad p\i ...
- 洛谷3233 HNOI2014(虚树+dp)
膜拜一发\(mts\_246,forever\_shi\) 这两位爷是真的无敌! 首先来看这个题,一看题目的数据范围和"关键点"字眼,我们就能得知这是一道虚树题 那就先一如既往的建 ...
- Java:泛型小记
Java:泛型小记 对 Java 中的 泛型类,做一个微不足道的小小小小记 泛型实现 概述 开篇: List<String> l1 = new ArrayList<String> ...
- [no_code][Beta]测试报告
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 测试报告 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...