博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] integer break DP算法
阅读量:5096 次
发布时间:2019-06-13

本文共 963 字,大约阅读时间需要 3 分钟。

Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.

For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).

Note: you may assume that n is not less than 2.

Hint:

  1. There is a simple O(n) solution to this problem.
  2. You may check the breaking results of n ranging from 7 to 10 to discover the regularities

设想对于每个n,有n = i + S, 也就是S = n - i,S可以代表一个数或者一个以上的数的和。(也就是说n是任意两个数之和,或者两个以上的数之和)。令f(n)代表n所对应的最大乘积。

对于第一种情况,f(n) = i * (n - i);

对于第二种情况,i是至少三个数的和,也就是说S = n - i至少是两个数的和,所以S对应的最大乘积为f(n - i),则f(n) = f(n - i) * i;

也就是说 f(n) = max(i*(n-i),f(n-i)*i);

代码如下:

class Solution {public:    int integerBreak(int n) { if (n <= 2) return 1; vector
maxArr(n+1, 0); maxArr[1] = 0; maxArr[2] = 1; // 2=1+1 so maxArr[2] = 1*1 for (int i=3; i<=n; i++) { for (int j=1; j

转载于:https://www.cnblogs.com/lazyfish/p/5957263.html

你可能感兴趣的文章
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
vim插件ctags的安装和使用
查看>>
mysql基础语句
查看>>