思路:
- dp[j]的含义:组成和为n最少需要dp[j]个完全平方数
- 递推公式:dp[j]=min(dp[j],dp[j-i*i]+1)
- 初始化:dp[0]=0,其他的初始化为比10000还大的数
- 遍历顺序:先物品后背包
python
class Solution(object):
def numSquares(self, n):
dp=[10010]*(n+1)
dp[0]=0
for i in range(1,n/2+2):
for j in range(i*i,n+1):
dp[j]=min(dp[j],dp[j-i*i]+1)
return dp[n]