整数拆分

题源:Leetcode

链接:https://leetcode-cn.com/problems/integer-break/

 

 

 很显然,最少分成两个整数,所以有以下推导:

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

 

代码如下:

 1 class Solution {
 2 public:
 3     int integerBreak(int n) {
 4         vector <int> dp(n + 1);
 5         for (int i = 2; i <= n; i++) {
 6             int curMax = 0;
 7             for (int j = 1; j < i; j++) {
 8                 curMax = max(curMax, max(j * (i - j), j * dp[i - j]));
 9             }
10             dp[i] = curMax;
11         }
12         return dp[n];
13     }
14 };

 

posted @ 2021-09-16 16:55  Danae丶  阅读(72)  评论(0)    收藏  举报