典型的揹包問題,假設小於n的完全平方數爲Si,那麼dp[n]=min(dp[n-S1],dp[n-S2],…dp[n-Si])+1
class Solution {
public:
int numSquares(int n) {
vector<int>dp(n + 1, INT_MAX);
dp[0]=0;
dp[1] = 1;
for (int i = 2; i < n + 1; ++i)
{
for (int j = 1; j*j <= i;++j)
dp[i] = min(dp[i],dp[i - j*j] + 1);
}
return dp[n];
}
};