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

(动态规划基础 整数拆分)leetcode 343

整数n拆成俩数

j的取值从1-n或者是1--n/2

使得n=j*(n-j)俩数比较

而在前j数中已经求出拆分后的最大值也就是dp[i-j],打个比方说dp[3]=2,隐含了拆分成1+2俩和数相乘为最优值,但是这里有特殊情况,4的两和数相乘比2*dp[2]要大,所以要比较,比较完了后和dp[i]比较,保留目前为止比较的最大值。

不比较dp[i],则最大值取j最后一次遍历的比较值

n/2之前的和n/2之后的求和数比较值一致,只改变了位置,可以做一个剪枝

#include <algorithm>
#include <vector>
#include <iostream>
#include<cmath>
using namespace std;

int main()
{
    int n = 3;
    vector<int>dp(n + 1, 0);

    if (n == 2)
        return 1;
    dp[0] = 0;
    dp[1] = 1;
    dp[2] = 1;

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

//dfs深度优先搜索写的


/*
vector<int> ans;

void backtracking(int product, int index,int n) {
 
    if (index == 0) {
        ans.push_back(product);
        return;
    }
    for (int i = 1; i <=index; i++) {
        if (n - i == 0)
            continue;
        product *= i;
        backtracking(product, index - i,n);
        product /= i;
    }
}

int main() {
    int n = 29;
    int product = 1;
    backtracking(product, n,n);
        cout << *max_element(ans.begin(),ans.end());
    return 0;
}
*/


http://www.kler.cn/a/536243.html

相关文章:

  • DeepSeek本地部署保姆级教程
  • 13.PPT:诺贝尔奖【28】
  • 如何利用Python爬虫获取商品销量详情:应对eBay反爬策略的实战指南与代码示例
  • Windows系统使用Git教程详解
  • python开发:爬虫示例——GET和POST请求处理
  • langchain教程-3.OutputParser/输出解析
  • 如何在macOS上安装Ollama
  • 航电系统之通信模块篇
  • 【Uniapp-Vue3】使用uni.$emit和$on页面通讯实现发布成功即时更新数据
  • 基于 Three.js 实现的爱心2025粒子特效
  • BUU28 [GXYCTF2019]BabySQli1
  • baigeiRSA
  • Ubuntu22.04操作系统4090显卡电脑本地化部署DeepSeek
  • 【DeepSeek论文精读】3. DeepSeekMoE:迈向混合专家语言模型的终极专业化
  • Vue3中watch和watchEffect的使用场景和区别
  • python编程-集合内置函数和filter(),集合常见操作
  • Springboot实现TLS双向认证
  • 网络安全基础知识|渗透测试和攻防演练的区别|WAF应用防火墙介绍以及部署方式
  • Python 操作列表思维导图
  • 搜维尔科技:Movella数字化运动领域的领先创新者
  • 机器学习数学基础:18.向量组及其线性组合
  • 【Unity3D Tab键实现切换输入框功能】
  • Docker的进程和Cgroup概念
  • 周六调休!!
  • 虚拟DOM与Diff算法:Vue如何高效更新UI?
  • java面向对象的程序设计,封装、继承、多态