典型的背包问题,假设小于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];
}
};
本文介绍了一种使用动态规划解决完全背包问题的方法,具体应用于寻找构成整数n所需的最少完全平方数个数的问题。通过逐步迭代,算法有效地计算出最优解。
1406

被折叠的 条评论
为什么被折叠?



