01背包问题python实现

来源:互联网 发布:淘宝名字叫什么好 编辑:程序博客网 时间:2024/06/05 12:04

可以记录路径,有时间再完善

# -*- coding:utf-8 -*-def bag(n, c, w, v):    res = [[0 for j in range(c + 1)] for i in range(n + 1)]    for j in range(c + 1):        res[0][j] = 0    for i in range(1, n + 1):        for j in range(1, c + 1):            res[i][j] = res[i - 1][j]            if j >= w[i - 1] and res[i][j] < res[i - 1][j - w[i - 1]] + v[i - 1]:                res[i][j] = res[i - 1][j - w[i - 1]] + v[i - 1]    print res    return resdef show(n, c, w, res):    print '最大价值为:', res[n][c]    x = [False for i in range(n)]    j = c    i = n    while i > 0:        if res[i][j] > res[i - 1][j]:            x[i - 1] = True            j -= w[i - 1]            i -= 1        else:            i -= 1    print '选择的物品为:'    for i in range(n):        if x[i]:            print '第', i, '个'if __name__ == '__main__':    n = 5    c = 17    w = [2, 2, 6, 5, 4]    v = [2, 2, 6, 5, 4]    res = bag(n, c, w, v)    show(n, c, w, res)
0 0
原创粉丝点击