没啥好说的,完全背包走就行了
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n + 1, INT_MAX);
dp[0] = 0;
for (int i = 1; i * i <= n; i++) // 物品
for (int j = i; j <= n; j++) // 背包容量
if (j >= i * i && j - i * i != INT_MAX)
dp[j] = min(dp[j], dp[j - i * i] + 1);
return dp[n];
}
};