1. 程式人生 > >Leetcode 343. Integer Break[Medium]

Leetcode 343. Integer Break[Medium]

原題地址

題目內容

這裡寫圖片描述

題目分析

題目的意思為,給定一個常數n,求出一個數字集合{Xi},使得X0+X1+…+Xi = n;並且使得X0*X1*….*Xi的結果最大
採用dp演算法。令dp[n]為最大的product。
那麼遞推方程為:
dp[n]=max(i*dp[n-i],i*(n-i))
其中dp[1] = dp[2] = 1;

程式碼實現

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