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

leetcode 343.整数拆分

思路:记忆化搜索或者动态规划

我们首先捋一下思路,而且分析最优解这一类问题,我们需要几个步骤:

1.看问题的描述,找出问题问的最优问题是什么;

2.然后我们就模拟一下这个问题进行到最后一步是什么样子;

3.去掉最后一步又是什么样子;

4.照着2.3步一直类推,这就是递推的过程,也就是我们需要模拟的过程。

举个例子,就拿这道题来说,最优问题是:把一个数拆开k个,使其乘积最大。

进行到最后一步时,是拆出的所有数进行相乘,得出最大乘积;

那么我们去掉最后一步时,其实就是把其中的两个数合起来,这个时候是最后一步的前一步。

这只类推,直到推到所给的n数。

就是这么一个过程。可能有点抽象,那么就先看记忆化搜索的代码,其实也就是DFS:

int mem[100];
class Solution {
public:int dfs(int u){if(mem[u])return mem[u];if(u==0)return 1;else{int res=0;for(int i=1;i<u;i++){res=max(res,max(i*(u-i),dfs(u-i)*i));}return mem[u]=res;}}int integerBreak(int n) {return dfs(n);}
};

好了,剩下的DP其实就是对于上面的这个递推进行了改写而已,dfs改写成dp数组就行了。由于dfs中的u也在变化,其中的拆分数也在变化,所以需要两个循环进行改写。

上代码:


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

http://www.lryc.cn/news/325098.html

相关文章:

  • 部署Zabbix Agents添加使能监测服务器_Linux平台_Yum源/Archive多模式
  • 吴恩达2022机器学习专项课程(一) 第一周课程实验:模型表示(Lab_03)
  • 流畅的 Python 第二版(GPT 重译)(十)
  • 【自然语言处理七-经典论文-attention is all you need】
  • 【嵌入式】STM32和I2C通信
  • 如何使用Harmony OS控制外设——输入输出?
  • 1.1-数组-704. 二分查找★
  • 人物百度百科怎么做?需要什么资料?
  • 在基于Android相机预览的CV应用程序中使用 OpenCL
  • 网络分类简述与数据链路层协议(PPP)
  • Linux文件系列:磁盘,文件系统,软硬链接
  • GPT4.0
  • 软件工程(双语)
  • 网络——套接字编程UDP
  • FPGA_AD9361
  • 探讨Java代码混淆加固工具
  • Linux——du, df命令查看磁盘空间使用情况
  • 数据库实验(一)SQL Server触发器
  • 添加网址到主页
  • 消息中间件如何实现高可用
  • Hbase 王者荣耀数据表 HBase常用Shell命令
  • 家用智能洗地机哪个牌子好?4款型号让你解锁高效省力生活体验
  • Linux--进程(1)
  • Qt登录页面
  • 软件工程-第8章 软件测试
  • 专业135+总分400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。
  • 主干网络篇 | YOLOv8改进之在主干网络中引入密集连接卷积网络DenseNet
  • lavarel的php程序是顺序执行,用pdo mysql连接池好像没有什么用啊。没有办法挂起等待啊,为什么要用连接池,应用场景是什么
  • spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功
  • 银行数字人民币系统应用架构设计