经典算法题--动态规划分析背包能不能装满
输入第一行是两个数字,N(1<=N<=100)和M(1<=M<=1000)表示现有N件物品,和一个最多只能装M千克物品的背包
第二行是N个物品每个的重量
现判断N件物品中,能否恰好选出合适重量的物品,正好把背包装满。能则返回YES,不能返回NO
1 N,M = list(map(int,input().strip().split(' '))) 2 w = list(map(int,input().strip().split(' '))) 3 dp = [[0 for i in range(M+1)] for _ in range(N+1)] 4 for i in range(1,N+1): 5 for j in range(1,M+1): 6 #如果第i件体积为w[i-1]的物品可以放进体积为j的背包中 7 if j >= w[i-1]: 8 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i-1]+w[i-1]]) 9 #如果第i件物品不能放进体积为j的背包中 10 else: 11 dp[i][j] = dp[i-1][j] 12 if dp[i][j] == M: 13 print('YES') 14 15 print('NO')
本质上,动态规划的理念就是制作一个M列N行的表格,数据结构化后即为一个二元数组

浙公网安备 33010602011771号