343. Integer Break

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

对于每个数字i,分为j和i-j两个部分,两个部分分别可以选择继续拆分和不拆分。

posted @ 2017-06-14 02:23  co0oder  阅读(82)  评论(0编辑  收藏  举报