343整数拆分
我做的时候其实一直都没明白为什么dp[i]=dp[i]*dp[j-i]为什么不对,我用了max对了,但是相当于是凑数凑出来的,这种写法不对是因为dp[i]表示的是,这个i一定被拆分的时候,拆出来的结果是多少,但是其实不一定说必须得拆分,所以取一个max就合理了。
class Solution {
public:
int integerBreak(int n) {std::vector<int> dp(n + 1);dp[1] = 1;for (int i = 2; i < n + 1; ++i) {int max_product = -1;const int mid = (0 == i % 2) ? (i / 2) : (i / 2 + 1);for (int j = 1; j <= mid; ++j) {max_product = std::max(std::max(dp[j], j) * std::max(dp[i - j], i - j),max_product);}dp[i] = max_product;}return dp.back();
}};