解答
#include<stdio.h>
#include<vector>
using namespace std;
class Solution {
public:
int numSquares(int n) {
// 1. dp[i]表示状态: i时的最小完全平方数量
// 2. 确认边界状态
// 3. 状态转移方程
vector<int> dp(n+1);
dp[0] = 0;
for (int i=1; i<=n; i++){
dp[i] = dp[i-1] + 1;
for (int j=2; j<=int(sqrt(i));j++){
int temp = dp[i-j*j] + 1;
if (temp < dp[i]){
dp[i] = temp;
}
}
}
return dp[n];
}
};
int main(){
vector<int> nums {2,7,9,3,1};
Solution s;
printf("%d",s.rob(nums));
return 0;
}