首页 > 其他分享 >动态规划-拆分数字

动态规划-拆分数字

时间:2023-02-12 23:24:54浏览次数:57  
标签:遍历 数字 int 拆分 数组 动态 dp 乘积

LeetCode链接

给定一个正整数 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

解题思路:

动态规划五步曲

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

1.确定dp数组以及下标的含义

我们的目标是求分解数字的成绩的最大和,所以,dp[i]存储的应该是数字i拆分的数字成绩的最大值

2.确定递推公式

对于dp[i],即分解数字i得到最大乘积,如果分为两个数,用j从1开始遍历,乘积为(i-j)*j

或者拆分为多个数,这里就要想到用dp[i-j]*j,dp[i-j]就是将一个数拆分为两个及两个以上

求出这两个成绩之前的最大值,即max(dp[i-j]*j,(i-j)*j)

dp[i] = max(dp[i],max(dp[i-j]*j,(i-j)*j)

3.dp数组的初始化

这里的初始化,dp[0]为0,dp[1]也为0,直到dp[2]为1 * 1  = 1

4.确定遍历顺序

如果i < 3,其实就没有遍历的必要了,所以i从3开始遍历,

j则从1开始,到i-1,如果是到i,则会出现i-j为1,任何正数乘1都是1,所以没有遍历的必要

5.举例推导dp数组

for(int i = 3;i <= n;i++)
{
  for(int j = 1;j < i - 1;i++)
  {
    dp[i] = max(dp[i],max((i-j)*j),dp[i-j]*j);
  }              
}

给出LeetCode的代码

class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1);
        dp[2] = 1;
        for(int i = 3;i <= n;i++)
        {
            for(int j = 1; j < i - 1;j++)
            {
                dp[i] = max(dp[i],max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }
};

 

标签:遍历,数字,int,拆分,数组,动态,dp,乘积
From: https://www.cnblogs.com/polang19/p/17114975.html

相关文章

  • Solon2 开发之容器,八、动态代理的本质
    在Java里动态代理,主要分:接口动态代理和类动态代理。因为它的代理类都是动态创建的,所以名字里会带上“动态”。官网的有些地方叫“代理”,也有些地方叫“动态代理”。都......
  • spring动态代理
    动态代理publicinterfaceUserManager{voidaddUser(Stringusername);voiddelUser(Stringusername);}publicclassUserManagerImplimplementsUserMa......
  • 拆分合并单元格并填充
    问题:将单元格拆分后并填充内容  解决:选取带合并的单元格》开始》合并居中》拆分填充内容 ......
  • 动态规划——从入门到入土
    什么是动态规划?动态规划,英文名为DynamicProgramming,又称DP(当然小写的dp也行),是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。由于动态规划并不是某......
  • OpenEBS动态创建存储
    简介​​OpenEBS​​是一种开源云原生存储解决方案,托管于​​CNCF​​基金会,目前该项目处于沙箱阶段,​​OpenEBS​​是一组存储引擎,允许您为有状态工作负载(​​StatefulSet......
  • 【ArcPy】要素类按字段拆分
    Python工具代码,非Python窗口脚本,可以自行编辑处理一下。#coding=gbkimportarcpyfromarcpyimportdaasdadefmain():lyr=arcpy.GetParameter(0)fld=a......
  • Qt使用FFmpeg的动态库
    C/C++项目有两种编译方式,MinGW跟MSVC,如下:1,《​​MinGW编译静态库​​》2,《​​MSVC编译静态库​​》但是MinGW编译的静态库,是不能给MSVC的链接器使用的,虽然两者编译......
  • http详解7-http协议之方法和状态码3状态码和数字
     ......
  • http详解8-http协议之方法和状态码4状态码和数字
    3开头重定向307保持原有得数据请求......
  • 中英文统计数字
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"c......