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

2023-11-16

剪绳子

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


    首先本题可以用贪婪算法和动态规划算法求解,虽然贪婪算法的时间复杂度和空间复杂度都比动态规划算法要小,但是要求有一定数学基础,需要定制合理的贪婪策略(面试的时候如果换一道题一般情况下想不出来的),所以个人感觉贪婪算法在本题中没有参考价值,故本题用动态规划的方法来求解

    本方法思想:用动态规划自下而上的计算,先算出n为1、2、3。。的最大乘积,知道小的以后在去算更大的乘积。比如n为4时候最大的可能只能在1*3,2*2之间取得;n为5时,只能在f(1)*f(4),f(2)*f(3)之间取得,而f(2),f(3),f(4)之前均已经求出。

持续更新...

代码附下

Java实现:

package 剪绳子;
/**
 * 给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1) 每段绳子的长度记为k[0],k[1],...,k[m].
 * 请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?
 * @author user 动态规划
 */

public class Test {
    public static void main(String[] args) {
        int len = 10;
        System.out.println(maxLen(len));
    }
    /**
     * @param len绳子的长度
     * @return
     */
    private static double maxLen(int len) {
        // lenCut[i]表示长度为i个的最优解 lenCut[3]比较特殊
        double lenCut[] = new double[len + 1];
        lenCut[0] = 0;
        lenCut[1] = 1;
        lenCut[2] = 2;
        lenCut[3] = 3;
        //初始化到3是因為3>1*2,其本身比分割的大,所以當分割比3大的數字時候,如5可以分成2,3,3就不繼續往下分割了
        if (len < 2) {
            return 0;
        } else if (len == 2) {
            return 1;
        } else if (len == 3) {
            return 2;
        } else {
            for (int i = 4; i <= len; i++) {
                double max = 0;
                for (int j = 1; j <= i / 2; j++) {
                    double temp = lenCut[j] * lenCut[i - j];
                    if (max < temp) {
                        max = temp;
                    }
                }
                lenCut[i] = max;
            }
        }
        return lenCut[len];
    }
}    

持续更新...欢迎赞赏!

https://blog.csdn.net/ustcer_93lk/article/details/80369712

如果有问题,欢迎大家留言,有更好的方法也期待大家告知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

12、剪绳子——剑指offer——动态规划 的相关文章

  • LeetCode312. 戳气球 (分治,记忆化搜索,动态规划)

    LeetCode312 戳气球 解题思路 记忆化搜索 动态规划 解题思路 官方题解 参考题解 核心思想 由于戳气球的操作会导致两个气球从不相邻变成相邻 使得后续操作难以处理 于是我们倒过来看这些操作 将全过程看成每次添加一个气球 solve
  • 每日一题:路径计数

    路径计数 题目 Daimayuan Online Judge f i j 表示从左上角走到 i j 的方案数 状态转移 i j 由 i 1 j 和 i j 1 转移而来 初始状态 得使得f 1 1 为1 所以初始化f 1 0 或者f 0 1
  • 数字三角形之动态规划(C语言实现)

    算法步骤 1 首先构造三个数组 第一个是存储三角形初始值的数组data 第二个是存储顶点到该点最大值的res 数组 第三个是存储该点上一个点的loc 数组 这里要对res 数组进行初始化 1 2 按照三角形的层次结构 从上到下 从左到右依次
  • Acwing-27. 数值的整数次方

    由于本题的指数是int范围 可能很大 所以需要用快速幂 Acwing 875 快速幂 中有详细介绍快速幂 点击链接即可传送 求解 https blog csdn net weixin 43844521 article details 127
  • 树09--二叉树的下一个结点

    树09 二叉树的下一个结点 jz57 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一个二叉树其中的一个结点 请找出中序遍历顺序的下一个结点并且返回 注意 树中的结点不仅包含左右子结点 同时包含指向父结点的next指针
  • 华为od机考题目-HJ68-成绩排序(比较难)

    while 1 try count int input reverse True if input 0 else False temp lt
  • 试除法判定质数模板题

    试除法判定一个数是否为质数类似于这道题 代码 include
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • 最近在学动态规划,很有意思的算法(1)拿金币

    问题描述 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 输入格式 第一行输入一个正整数n 以下n行描述该方
  • leetcode刷题(77)——312. 戳气球

    一 题目 有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 每当你戳破一个气球 i 时 你可以获得 nums left nums i nums right 个硬币 这里
  • C++---背包模型---装箱问题(每日一道算法2023.3.9)

    注意事项 本题是 动态规划 01背包 的扩展题 dp和优化思路不多赘述 题目 有一个箱子容量为 V 同时有 n 个物品 每个物品有一个体积 正整数 要求 n 个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入格式 第一行是一个整数
  • LeetCode338. 比特位计数

    题目连接 https leetcode cn com problems counting bits 解题思路 这道题需要计算从 0 到 num 的每个数的二进制表示中的 1 的数目 最直观的方法是对每个数直接计算二进制表示中的 1 的数目
  • 剑指 Offer 05. 替换空格(java+python)

    请实现一个函数 把字符串 s 中的每个空格替换成 20 示例 1 输入 s We are happy 输出 We 20are 20happy 限制 0 lt s 的长度 lt 10000 java StringBuilder StringB
  • 学习动态规划-子矩阵

    1 全为1的最大正方形 在一个由 0 和 1 组成的二维矩阵内 找到只包含 1 的最大正方形 并返回其面积 来源 221 最大正方形 解题思路 dp i j 表示以matrix i j 为右下角的全1的正方形的最大边长 很明显 当matri
  • 【LeetCode75】第五十九题 第N个泰波那契数

    目录 题目 示例 分析 代码 题目 示例 分析 题目顾名思义 让我们求出第N个泰波那契数 也就是除了开头三个数之外 第四个数开始就是等于前三个数之和 不要和斐波那契数弄混了 斐波那契是前两个数的和 泰波那契是前三个数的和 也就是说当前数 我
  • 华为od机考真题-数据分类

    while 1 try c b nums list map int input split dp
  • 把字符串转换成整数(字符串)

    题目描述 将一个字符串转换成一个整数 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 输出描述 如果是合法的数值表达则返回该数字 否则返回0 思路一 p
  • leetcode-712. 两个字符串的最小ASCII删除和

    712 两个字符串的最小ASCII删除和 题目 给定两个字符串s1 和 s2 返回使两个字符串相等所需删除字符的 ASCII 值的最小和 示例1 输入 s1 sea s2 eat 输出 231 解释 在 sea 中删除 s 并将 s 的值
  • 雪糕的最大数量 排序+贪心

    雪糕的最大数量 雪糕的最大数量 题目描述 样例 数据范围 思路 代码 题目描述 夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪
  • acwing算法提高之动态规划--数字三角形模型

    目录 1 基础知识 2 模板 3 工程化 1 基础知识 暂无 2 模板 暂无 3 工程化 题目1 摘花生 解题思路 DP 状态定义 f i j 从 1 1 走到 i j 所摘花生总和 状态转移 有 从上方走到 i j 有 f i 1 j w

随机推荐

  • MySQL5.7安装报错:GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM

    根据官方文档使用yum安装MySQL5 7 添加mysl comunity repo如下 mysql57 community name MySQL 5 7 Community Server baseurl http repo mysql c
  • [Docker]进入容器命令

    docker exec it api bin bash docker exec it api bin sh
  • JVM入门教程

    文章目录 简介 1 Java内存区域 1 1 程序计数器 1 2 Java虚拟机栈 1 3 本地方法栈 1 4 Java堆 1 5 方法区 1 6 运行时常量池 1 7 直接内存 2 HotSpot虚拟机 2 1 对象的创建 2 2 对象的
  • MyISAM和InnoDB区别关联详解

    Mysql架构 什么存储引擎 MySQL和InnoDB对比1 2 总结 Mysql存储架构 从上图可以发现 MySQL由以下几部分组成 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲 Cache 组件 插件
  • C++引用,四区和函数

    引用变量 四区 函数 没有函数重载 代码区 全局区 堆区和栈区 代码区 全局区 栈区 堆区 new操作符 引用 函数的默认参数 函数的占位参数 代码区 全局区 堆区和栈区 注意 其中代码区和全局区是运行前的 栈区和堆区是运行后的 即如果ex
  • 微信小程序实现举报功能

    一 后台接口 userController java 前端接收一个usersReportd对象 包含数据如下 PostMapping reportUser public IMoocJSONResult reportUser RequestB
  • React Hooks

    Facebook团队对社区上的MVC框架都不太满意的情况下 开发了一套开源的前端框架react 于2013年发布第一个版本 react最开始倡导函数式编程 使用function以及内部方法React creactClass创建组件 之后在E
  • 第二章 系统设置及基本操作

    第二章 系统设置及基本操作 使用GNOME桌面套件中的首选项设置及系统管理工具执行以下任务 一 为第一块网卡设置静态IP地址 并能够与同网段中的其他主机相互通信 步骤 1 点击 系统 管理 网络 打开 网络配置 窗口 如图所示 2 在 配置
  • 华为od机试 C++ 猜字谜

    题目 玩家看到的是个错乱的单词 像 nesw 这样 他们要做的就是从一大堆备选的单词中 猜出这个错乱单词原来的模样 怎么才算猜对了呢 有两种可能 把错乱单词的字母重新排列一下 如果跟备选单词一模一样 那就对了 例如 nwes 重新排列就是
  • CTFshow 命令执行 web34

    源码
  • 小白上路~微信小程序登录授权无法获取用户信息

    1 button 标签和 open type getUserInfo 获取用户信息失败 天哪噜 必须好好记录一番由于没有看官方文档更新 api 而导致的 BUG 一觉醒来 发现准备收尾的小程序无法获取到用户信息了 怎么回事 于是一顿焦虑 骚
  • CodeWhisperer 初体验

    今年算是 AI 正式破圈的一年 无数的工具 产品横空出世 无论在面向企业的大语言模型 还是帮助个人的 AI 工具 数不胜数 其中关于 AI 编程助手领域 近年来也涌现了很多不错的产品 例如 Copilot Cursor 还是我们今天要体验的
  • 【转】在iPad的Safari上查看HTML源代码

    在网上搜索的文章 转来转去 基本上都缺少了关键脚本 所以写在这了 使用方法 1 随便保存一个书签 名称就叫查看源码之类的就好了 2 编辑该书签 删除原网址 将下面的脚本黏贴到网址中 3 在你想要查看源码的页面点击该书签 源码就出现了 jav
  • 【Pytorch】第 1 章 :强化学习和 PyTorch 入门

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • html网页的基本标签

    1 标题标签 h1 一级标签 h1 h2 二级标签 h2 h3 三级标签 h3 h4 四级标签 h4 h5 五级标签 h5 2 段落标签 p 民办清华 建校三十周年 p p okok p 3 换行标签 4 水平线标签 5 字体样式标签 st
  • python写水仙花数

    水仙花数是指一个n位数 n gt 3 他的每个位上 的数字的n次幂之和等于他本身 例1 3 5 3 求1000以内的水仙花数 i 100 while i lt 1000 a i 100 b i 10 10 c i 10 if a 3 b 3
  • FPGA学习日记(五)ZYNQ——在线逻辑分析仪(ILA)硬件调试及simulator仿真软件的创建使用

    一 在线逻辑分析仪 ILA vivado的在线逻辑分析仪 ILA 其借用了传统逻辑分析仪的理念以及大部分的功能 并利用 FPGA 中的逻辑资源 将这些功能植入到 FPGA 的设计当中 如下图所示 ILA占用一部分FPGA内部逻辑资源 可看做
  • 运算放大器的关键指标详解二(噪声)

    1 噪声指标 Noise 一个正常工作的放大电路 当输入端接地时 用示波器观察输出 你看到的可能不是平直的细线 而是在一定幅度之内的杂乱无章的波形 这就是噪声 你在示波器上看到线越粗 就说明噪声幅度越大 放大电路的输出端噪声 小至 V 以下
  • redis客户端Jedis和Lettuce

    Jedis和Lettuce的区别 Jedis是同步的 不支持异步 Jedis客户端实例不是线程安全的 需要每个线程一个Jedis实例 所以一般通过连接池来使用Jedis Lettuce是基于Netty框架的事件驱动的Redis客户端 其方法
  • 12、剪绳子——剑指offer——动态规划

    剪绳子 问题描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 首先本题可以用贪婪算法和动态规划算法求解