当前位置: 首页 > news >正文

化纤公司网站建设成品视频直播软件推荐哪个好一点非周马加

化纤公司网站建设,成品视频直播软件推荐哪个好一点非周马加,wordpress外网,国内做外贸网站的有哪些343. 整数拆分 文章目录 [343. 整数拆分](https://leetcode.cn/problems/integer-break/)一、题目二、题解方法一:动态规划方法改良 一、题目 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整…

343. 整数拆分

文章目录

    • [343. 整数拆分](https://leetcode.cn/problems/integer-break/)
      • 一、题目
      • 二、题解
        • 方法一:动态规划
        • 方法改良


一、题目

给定一个正整数 n ,将其拆分为 k正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

二、题解

方法一:动态规划

好的,让我们按照动态规划的五个步骤来解决这道题目:

步骤一:确认dp数组以及下标的含义

  • dp[i] 表示正整数 i 拆分后可以获得的最大乘积。

步骤二:确认递推公式

  • 对于正整数 i,我们可以把它拆分成两个正整数 j 和 i-j,其中 1 <= j < i。
  • 那么,对于拆分的两个正整数 j 和 i-j,可以计算它们的乘积 max(j * (i-j))。
  • 但我们还需要考虑 j 和 i-j 是否继续拆分,因此递推公式为 dp[i] = max(max(j * (i-j), j * dp[i-j]), max(dp[j] * (i-j), dp[j] * dp[i-j]))。

步骤三:数组初始化

  • dp[1] 和 dp[2] 的值分别为 0 和 1,因为它们都不能再拆分。

步骤四:确定遍历顺序

  • 我们从小到大遍历正整数 i,从 3 开始遍历到 n,依次计算 dp[i] 的值。

步骤五:举例推导dp数组
让我们通过一个示例来推导 dp 数组。假设输入 n = 6:

进行推导:

  1. 初始化 dp 数组:
dp = [0, 1]
  1. 计算 dp[3]:
dp[3] = max(max(1*(3-1), 1*dp[3-1]), max(dp[1]*(3-1), dp[1]*dp[3-1])) = max(max(1*2, 1*1), max(0*2, 0*1)) = 2
  1. 计算 dp[4]:
dp[4] = 4
  1. 计算 dp[5]:
dp[5] = 6
  1. 计算 dp[6]:
dp[6] = 9

最终返回 dp[n],即 dp[6] = 9,表示将正整数 6 拆分后可以获得的最大乘积为 9。

class Solution {
public:int integerBreak(int n) {vector<int> dp(n+1);dp[1] = 0;dp[2] = 1;for(int i = 3; i <= n; i++){int maxm = 1;//i/2是一个改善措施,因为当j>i/2后所有的情况之前都已经产生过了for(int j = 1; j <= i/2; j++){int k = i-j;int temp = max(max(j*k,dp[j]*k),max(dp[k]*j,dp[j]*dp[k]));if(maxm < temp) maxm = temp;}dp[i] = maxm;}return dp[n];}
};

方法改良

在递推公式的计算部分,我们可以将递推公式简化为 dp[i] = max(j * k, j * dp[k]),并且不再计算 dp[j] * dp[k] 部分。

改良的原因:

  • 在原始的递推公式中,我们考虑了 j 和 k 是否继续拆分,计算了 dp[j] * dp[k] 部分,但实际上,这部分是在之前的状态中已经计算过的,而且不会再参与当前状态的计算。
  • 因此,我们可以直接在递推公式中计算 j * dp[k] 部分,而不再重复计算之前已经得到的 dp[j]。

改良后的代码如下:

cppCopy codeclass Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;for (int i = 3; i <= n; i++) {int maxm = 1;for (int j = 1; j <= i / 2; j++) {int k = i - j;int temp = max(j * k, j * dp[k]);if (maxm < temp) maxm = temp;}dp[i] = maxm;}return dp[n];}
};
http://www.yayakq.cn/news/948144/

相关文章:

  • 咸阳做网站的公司有哪些长沙建设网站企业
  • 长春网站制作最新招聘信息如何建立营销网络
  • 如何让百度搜到自己的网站找客源用哪个软件好
  • 网站管理办法制度网站怎么做构成
  • 昆山网站建设详细方案免费wordpress主题分享
  • 贵阳网站建设方案维护在实际工作中最常用的网页制作工具
  • 找家里做的工作上哪个网站建设银行官方网网址
  • 友汇网网站建设管理后台网站嵌入式软件开发工程师是做什么的
  • 网站建设外包工作采集1024图片到wordpress
  • 苏州网站开发公司有哪些id注册网站
  • 做旅游网站毕业设计做服装哪个网站图片多
  • 河西做网站在网上做广告怎么做
  • 天津做app和网站的公司成品网站seo
  • 做公司网站的公司有哪些广州网站制作实力乐云seo
  • 手机自适应网站建设六安论坛六安杂谈
  • 北京企业网站seo平台wordpress文章不能分段
  • 网站开发有没有前途郑州代理记账
  • 成都分类信息网站开发佛山做seo推广公司
  • 400电话申请网站源码程序深圳注册公司条件
  • 怎么用文本做网站北京网站制作公司建站
  • 园区网站建设目的页面设计在哪儿
  • 有免费做理化试验的网站吗桂林网站建设服务电话
  • 云南建设项目审批中心网站如何申请免费网站空间
  • 投票网站建设东莞做网站乐云seo
  • 建设网站范文公建设计网站
  • 做那种网站wordpress移动端底部广告
  • 建设电子商务网站论文网站后台程序和数据库开发
  • 网站设计实例网红营销论文
  • 电子邮箱网站建设wordpress 上一页 下一页
  • 网站制作复杂吗建设银行通控件网站