# 343. Integer Break
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.
Example 1:
```
Input: 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.
```
Example 2:
```
Input: 10
Output: 36
Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.
```
**Note**: You may assume that n is not less than 2 and not larger than 58.
---
# Solution
Because the maximum input is not larger than 58, so we can allocate a fixed-length array to store the result of each number we known.
The array is initialized as follows:
- The value of both index 0 and 1 is 0.
- The value of index 2 is 1 that is a known answer to this problem.
- The remainings are set to -1 which meant the unknown answer.
## Split the Number
Assume the input number N, split then N into L and R.
- L means left, start at 1.
- R means right, start at N - 1.
- Run a loop for each time that incress L by 1 and decrease R by 1.
- Stop loop until L greater than R.
- Find the maximum production of L x R.
## Example
Assume that N = 8, L = 1 and R = 7.
- 1 x 7 = 12, 7 = 12 because the maximum production of 7 can be consisted by 3 and 4.
- 2 x 6 = 18, 6 = 9 because the maximum production of 6 can be consisted by 3 and 3.
- 3 x 5 = 18, 5 = 6 because the maximum production of 5 can be consisted by 2 and 3.
- 4 x 4 = 16, the maximum production of 4 still is 4.
**NOTE**: In the above, the 5 can split into 2 and 3 that product is greater than 5, so, if L or R equals the 5 we can replace it into 2 and 3. The 3 although can consist of 2 and 1, but the product is lower than 3, so we don't replace it.
See the full [solution](https://github.com/Albert-Hu/leetcode/tree/master/solutions/301-350/343).
###### tags: `leetcode` `Medium` `Math` `Dynamic Programming`