题目链接力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台279
思路:多重背包装满最优化问题
两层循环先遍历物品再遍历容量昂式解法动态规划直接秒了
代码
注意:完全平方数相当于要装入背包里的物品,首先将其装到一个数组里,再进行动态规划
class Solution {
public:
int numSquares(int n) {
vector<int>nums(sqrt(n)+1);
for(int i=0;i<=sqrt(n);i++)
nums[i]=i*i;
vector<int>dp(n+1,n+1);//dp数组及初始化
dp[0]=0;
for(int i=0;i<nums.size();i++)
{
for(int j=nums[i];j<=n;j++)
{
dp[j]=min(dp[j],dp[j-nums[i]]+1);
}
}
if(dp[n]==n+1) return 0;
else
return dp[n];
}
};