### 解题思路
一个典型的完全背包问题
### 代码
class Solution {
public:
int numSquares(int n) {
vector<int> tab;
for(int i = 1; i <= 100;++i){
if(pow(i,2) <= n){
tab.push_back(pow(i,2));
}else break;
}
vector<int> dp(n+1,1e9);
dp[0] = 0;
for(int i = 1; i <= tab.size(); ++i){
for(int j = tab[i-1]; j <= n; ++j){
dp[j] = min(dp[j],dp[j-tab[i-1]]+1);
}
}
return dp[n];
}
};