C++ 0 ms, 100.0% DP iterative solution (like rod-cutting problem)
Fill opt[0]....opt[n-1  with maximum product you can get with or without dividing the integer for 0 to n-1. Then fill opt[n] with the constraint of dividing it 
Fill `opt[0]....opt[n-1`  with maximum product you can get **with or without** dividing the integer for 0 to n-1. Then fill `opt[n]` with the constraint of dividing it atleast once.\n```\nclass Solution {\npublic:\n    int integerBreak(int n) {\n        vector<int> opt(n+1, 0);\n        opt[0] = 1;\n        opt[1] = 1;\n        \n        for(int i = 2; i < n; i++){\n            for(int j = 1; j <= i; j++){\n                opt[i] = max(opt[i], j*opt[i-j]);\n            }\n        }\n        \n        opt[0] = 0;\n        for(int j = 1; j <= n; j++){\n            opt[n] = max(opt[n], j*opt[n-j]);\n        }\n        return opt[n];\n    }\n};\n```
[]