思路:
dp[i]定义为,求能够凑成数i所需要的最少个数为dp[i]。状态转移:dp[i]=min(dp[i-coins[i]]+1,dp[i]。这里是求个数!求个数!求个数!所以这里是由上个状态加数字1转移,这里要好好理解。
def coinsChange(coins,n): #求能凑成i的最少个数 dp=[float('inf')]*(n+1) dp[0]=0 for i in range(1,n+1): for j in coins: if i>=j: dp[i]=min(dp[i-j]+1,dp[i]) if dp[n]==float('inf'): return -1 return dp[n] def main(): coins=list(map(int,input().split())) n=int(input()) res=coinsChange(coins,n) print(res) if __name__=="__main__": main()