数据结构学习 jz14剪绳子

关键词:数学 动态规划 快速幂

这道题其实是分为两题。

题目一:

这道题我是没有思路的,看了k神的答案才知道有数学的方法。

方法一:

数学:其实中间的推导我没看,我服了。

思路:

复杂度计算:

时间复杂度O(1)

空间复杂度O(1)

代码:

看了k神的答案自己写的

class Solution {
public:int cuttingBamboo(int bamboo_len) {if(bamboo_len<=3) return bamboo_len-1;int a=bamboo_len/3 ,b=bamboo_len%3;if(b==0) return pow(3,a);if(b==1) return pow(3,a-1)*4;return pow(3,a)*2;}
};

方法二:

动态规划。

是我在看官方题解里面得到的思路。但比数学方法慢很多。

思路:

dp状态:

dp[i]如果竹子长为i,砍竹子可以得到的最大乘积结果。

复习知识点:

无后效性:dp[i]只与前面的dp结果有关,不与前面dp求得的过程有关。

最优子结构:dp[i]可以由dp[0...i-1]推出。

 转移方程:

dp[i]=max(dp[1..i-1]*dp[i-1...1])

即dp[i]必须要被砍成两半,但是这两半要怎么选,要一个一个试过才知道(第二个for循环)。

比如:i==6。砍的方法有dp[5]*dp[1]、dp[4]*dp[2]、dp[3]*dp[3],前面的dp已经算出了他们的最优值,拿他们的乘积比较即可。

初始化:

这个dp初始化是为了后面的dp专门设计的

        dp[0]=0;//0
        dp[1]=1;//1
        dp[2]=2;//2
        dp[3]=3;//3

复杂度计算:

时间复杂度O(n*n)

空间复杂度O(n)

代码:

这里我在第二个for循环减少了一半开销。因为dp[5]*dp[1]和dp[1]*dp[5]一样的。

class Solution {
public:int cuttingBamboo(int bamboo_len) {if(bamboo_len<=3) return bamboo_len-1;vector<int> dp(bamboo_len+1);dp[0]=0;//0dp[1]=1;//1dp[2]=2;//2dp[3]=3;//3for(int i=4;i<=bamboo_len;++i)//时间复杂度O(n*n){for(int j=1;j<=i/2+i%2;++j)//只用找一半{dp[i]=max(dp[i],dp[i-j]*dp[j]);}}return dp[bamboo_len];}
};

题目二:

数学、快速幂

这道题和第一题的区别就是长度的范围扩大了,如果用数学法,用stl里的pow求3为底的结果会爆炸,所以需要快速幂来取模。

思路:

第一题的数学+快速幂+求模 

复杂度计算:

时间复杂度O(logn) 快速幂

空间复杂度O(1)

代码:

class Solution {
public:int MOD=1000000007;long long my_pow(int a,int n){long long res=1;long long rex=a;while(n){if(n&1){res=res*rex%MOD;}rex=rex*rex%MOD;n=n>>1;}return res;}int cuttingBamboo(int bamboo_len) {if(bamboo_len<=3) return bamboo_len-1;int a=bamboo_len/3,b=bamboo_len%3;long long res;if(b==0) {res = my_pow(3,a);return res;}if(b==1) {res = my_pow(3,a-1);res=res*4%MOD;return res;}res = my_pow(3,a);res=res*2%MOD;return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆变器之推挽谐振

首先把前级推挽电路分成几个模块&#xff1a;方波发生器、谐振LC、整流滤波以及负载。框图如下图所示&#xff1a; 分析前提&#xff1a;稳态 在推挽电路正常工作中&#xff0c;输入电压恒定、输出电流电压也恒定&#xff08;电源处于稳定的工作状态中&#xff09; 方波发生器…

C-操作符详解

1.进制转换 1.1 10进制转2进制 方法&#xff1a;短除法 1.2 2进制转换8进制 8进制的数字每⼀位是0~7的&#xff0c;0~7的数字&#xff0c;各⾃写成2进制&#xff0c;最多有3个2进制位就⾜够了&#xff0c;⽐如7的⼆进制是111&#xff0c;所以在2进制转8进制数的时候&#xf…

SQL语句详解一

概念 什么是 SQL&#xff1f;&#xff08;如果还未安装MySQL请参考此文章安装下&#xff09; Structured Query Language&#xff1a;结构化查询语言其实就是定义和操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方&#xff0c;称为"方言"。 SQ…

C语言常用库函数

1.C语言标准库函数 C语言标准库函数由15个头文件组成。 1.数学函数 数学计算是计算机最擅长的运算&#xff0c;计算机大部分运算方法都是基于数学计算执行的。C语言提供了很多用于数学计算的库函数&#xff0c;合理利用这些库函数&#xff0c;将对程序的编写和运行起到事半功…

第9章-第2节-Java中的反射机制

1、概念&#xff1a; 反射机制&#xff1a;是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意属性和方法&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 java…

e2studio开发三轴加速度计LIS2DW12(4)----测量倾斜度

e2studio开发三轴加速度计LIS2DW12.4--测量倾斜度 概述视频教学样品申请源码下载计算倾斜角度工作原理单轴倾斜检测双轴倾斜检测三轴倾斜检测通信模式管脚定义IIC通信模式速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e…

Ubuntu共享文件到win

Ubuntu共享文件到win 1、安装samba sudo apt-get install samba samba-common2、创建一个共享文件夹&#xff0c;并设置777权限 mkdir /home/qyh/share sudo chmod 777 /home/qyh/share我的用户名&#xff1a;qyh。 3、添加用户及密码 sudo smbpasswd -a qyh4、修改配置文…

ssh远程访问及控制

目录 一、ssh协议简介 1、实现远程访问的协议和程序 2、ssh协议的概念及功能 3、ssh协议的工作原理 3.1 对称加密与非对称加密 3.1.1 对称加密&#xff08;Symmetric Encryption&#xff09; 3.1.2 非对称加密&#xff08;Asymmetric Encryption&#xff09; 3.2 公钥传…

Pandoc:markdown转word

简介&#xff1a;Pandoc是由John MacFarlane开发的标记语言转换工具&#xff0c;可实现不同标记语言间的格式转换&#xff0c;堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写&#xff0c;以命令行形式实现与用户的交互&#xff0c;可支持多种操作系统&#xff1b;Pand…

斯坦福CS231n学习笔记:DL与CV教程 (1) | 引言与知识基础

前言 &#x1f4da; 笔记专栏&#xff1a;斯坦福CS231N&#xff1a;面向视觉识别的卷积神经网络&#xff08;23&#xff09;&#x1f517; 课程链接&#xff1a;https://www.bilibili.com/video/BV1xV411R7i5&#x1f4bb; CS231n: 深度学习计算机视觉&#xff08;2017&#xf…

Uibot (RPA设计软件)网页表单填写————课前材料四

微信群发助手机器人的小项目友友们可以参考小北的课前材料二博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; 紧接着小北的前两篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#x…

USB micro输入口中三个问题详解——差分信号、自恢复保险丝SMD1210P050TF、电容滤波

前言&#xff1a;本文对USB micro输入口中遇见的三个问题进行详解&#xff1a;差分信号、自恢复保险丝SMD1210P050TF、电容滤波 目录&#xff1a; 差分信号 自恢复保险丝SMD1210P050TF 电容滤波 如下图&#xff0c;USB为U-F-M5DD-Y-1型号&#xff08;9个引脚&#xff0c;除…

【AIGC-文本/图片生成视频系列-9】MagicVideo-V2: 多阶段高美感视频生成

最近得益于扩散模型的快速发展&#xff0c;文本到视频&#xff08;T2V&#xff09;模型的激增。 今天要介绍的是字节的MagicVideo-V2&#xff0c;一个新颖的多阶段 T2V 框架&#xff0c;它集成了文本到图像 (T2I)、图像到视频 (I2V)、视频到视频 (V2V) 和视频帧插值 (VFI) 模块…

LeetCode讲解篇之78. 子集

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个start变量记录当前从哪里开始遍历搜索nums 搜索过程的数字组合加入结果集 然后从start下标开始遍历nums&#xff0c;更新start&#xff0c;递归搜索 直到搜索完毕&#xff0c;返回结果集 题解代码 class …

LabVIEW通过视频识别开发布氏硬度机自动化测量系统

LabVIEW通过视频识别开发布氏硬度机自动化测量系统 概述&#xff1a; 在当前的工业检测与自动化领域&#xff0c;对于精确测量技术的需求日益增长。特别是在材料硬度测试领域&#xff0c;布氏硬度机的自动化测量出现在越来越多的使用中。展示了一个基于LabVIEW开发的布氏硬度…

自定义C#类库(.dll文件)

环境配置 操作系统&#xff1a;Windows 10 开发工具&#xff1a;Visual Studio 2022 .Net桌面开发环境&#xff1a; 开发步骤 &#xff08;一&#xff09;创建C#类库项目 &#xff08;二&#xff09;配置项目名称和项目路径 &#xff08;三&#xff09;选择所使用的框架&a…

聊聊websocket那些事

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 一、什么是websocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议。 它是 HTML5 中的一种新特性&#xff0c;能够实现 Web 应用程序和服务器之间的实时通信&#xff0c;…

大量的视频如何批量随机分割的方法:批量剪辑不求人

在处理大量视频文件时&#xff0c;经常要进行随机分割&#xff0c;满足不同的需求。制作短视频、片段集锦等&#xff0c;批量随机分割视频都是一个高效的方法。下面来看云炫AI智剪如何操作的吧。 分割后的视频缩略图展示&#xff0c;被分割的视频自动分类保存在对应的文件夹中。…

Editplus配置Java运行环境

目录 找工具&#xff08;图1&#xff09; 编译Java&#xff1a;-d classes是在文件classes编译&#xff08;图2&#xff09; 运行Java&#xff1a;-classpath classes是在文件classes运行&#xff08;图3&#xff09; 编译和运行Java &#xff08;图4-5&#xff09; 找工具…

张载为往圣继绝学,唯一的错是不够强大

“自古雄才多磨难&#xff0c;从来纨绔少伟男。” 张载&#xff0c;人称“横渠先生”。他在横渠镇&#xff0c;授徒讲学&#xff0c;恢复古礼&#xff0c;试验井田&#xff0c;写书《正蒙》。张载讲学关中&#xff0c;弟子多为关中人&#xff0c;其学派被称作关学。 张载自学…