文章目录
题目
题目解析
首先声明这就是一个完全背包问题,为什么呢?因为题目就是需要你找到完全平方数去填补数字n使得填补所用的完全平方数最少,而这些完全平方数可以无限使用。显然我们不清楚的就是背包内要装的物品,因为题目并未给出。
关于背包内要装入的物品,我们根据题意可知是小于sqrt(n)的完全平方数,所以我们可以通过枚举1~sqrt(n)范围内的完全平方数得到背包内要装入的物品。
有这个物品后,我们就完全可以看作是零钱兑换
- 给你不同的面额,要求用最少张的钞票兑换成金额n。
把题目转成了零钱兑换问题是不是有背包问题内味了?
接下来就是完全背包的讲解过程了。
dp关系不清楚可以看看我对昨天那道每日一题完全背包的讲解过程零钱兑换II
此题dp[i][j]
代表选择前i类物品装满j所用的最少物品数。
d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j ] + d p [ i ] [ j − n u m s [ i − 1 ] ] ) dp[i][j]=min(dp[i-1][j]+dp[i][j-nums[i-1]]) dp[i][j]=min(dp[i−1][j]+dp[i][j