思路:
- dpj的含义:组成和为n最少需要dpj个完全平方数
- 递推公式:dpj=min(dpj,dpj-i\*i+1)
- 初始化:dp0=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]