Problem P25. [算法课动态规划] 整数拆分
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。
提示:
- 2 <= n <= 58
- 题目数据保证运算过程不超过 int 所能表示的范围
输入
输入正整数n
输出
输出 可以获得的最大乘积
样例
标准输入复制文本 |
2 |
标准输出复制文本 |
1 |
标准输入复制文本 |
10 |
标准输出复制文本 |
36 |
#include <iostream>
#include <vector>
using namespace std;
int maxProduct(int n) {
vector<int> dp(n + 1);
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
}
int main() {
int n;
cin >> n;
cout << maxProduct(n) << endl;
return 0;
}