51Nod-1085-背包问题

来源:互联网 发布:java整形转换为字符串 编辑:程序博客网 时间:2024/05/30 23:08

51Nod-1085-背包问题

                1085 背包问题在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Input第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000)第2 - N + 1行,每行2个整数,Wi和Pi,分别是物品的体积和物品的价值。(1 <= Wi, Pi <= 10000)Output输出可以容纳的最大价值。Input示例3 62 53 84 9Output示例14

解题方法
一道标准的01背包模板题。
解这道题需要背包的基本知识。而背包又属于动态规划。故而要需要先认识动态规划,然后再学习背包问题。
下面的解题代码是用一维来写的,二维转化一维不懂的可以看看我写的这篇博客——对基础背包的公式理解


解题代码

#基础背包一维核心代码def Basepack(A, V, cost, weight):    #循环变量v从V到cost逐渐递减    for v in range(V, cost-1, -1):        A[v] = max(A[v], A[v-cost] + weight)while True:    try:        N, V = list(map(int, input().split()))        A = [0]*10010        B = []        #把花费与价值放入一个列表里并且把该列表存入列表B中        for i in range(N):            B.append(list(map(int, input().split())))        #  *B[i]即B[i][0], B[i][1]即把B[i]这个表拆解        for i in range(N):            Basepack(A, V, *B[i])        print(A[V])    except EOFError:        break
原创粉丝点击