# Python动态规划解法,比较通用,题目类似找零钱问题 import sys n = int(sys.stdin.readline().strip()) def buy_nails(nails, target): dp = [target + 1] * (target + 1) # 初始化很重要 dp[0] = 0 for i in range(1, len(nails) + 1): for j in range(1, target + 1): if j >= nails[i - 1]: dp[j] = min(dp[j], dp[j - nails[i - 1]] + 1) min_num = dp[-1] if min_num < target + 1: return min_num else: return -1 nails = [4, 9] dp = buy_nails(nails, n) print(dp)