思路:
借鉴了别人的思路,先一个默认值为INT_MAX长度为n+1的数组。dp[0]=0,
比如算12,
第一 , 先把1,4,9等平方数的值等于 dp[0]+1;
然后,2,5,10,他们的值就是(本身的值,d[i]+1),d[i] = 1, +1的意思就是加一个平方数的意思,可以加1,加4,加9...
int numSquares(int n) {
vector<int> dp(n + 1, INT_MAX);
dp[0] = 0;
for (int i = 0; i <= n; ++i) {
for (int j = 1; i + j * j <= n; ++j) {
dp[i + j * j] = min(dp[i + j * j], dp[i] + 1);
}
}
return dp.back();
}