01背包问题(动态规划)python dp二维数组

01背包问题(动态规划)

题目链接

造不出轮子,研究一下背包问题经典算法 dp数组,这是链接。看完大概能试着写写代码了。

1.读取输入并创建dp数组
import numpy as np
n, v = map(int, input().split())
item = [list(map(int, input().split())) for i in range(n)]
dp = np.zeros((4, 5))

2.初始化二维dp数组

for i in range(n):
    dp[i][0] = 0
for i in range(1, v+1):
    if item[0][0] <= i:
        dp[0][i] = item[0][1]

3.填充dp数组并输出

for i in range(1, n):
    for j in range(1, v+1):
        if j < item[i][0]:
            dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-item[i][0]] + item[i][1])
print(dp[n-1][v])

4.优化思路

链接中有用一维dp数组的办法,还没来得及看。一维dp数组还能进一步优化迭代顺序,太TM高级了。

5.全部代码

def zeros(m, n):
    output = [[] for i in range(m)]
    for i in range(m):
        for j in range(n):
            output[i].append(0)
    return output

n, v = map(int, input().split())
item = [list(map(int, input().split())) for i in range(n)] #item[i][0]是物品体积,item[i][1]是物品价值
dp = zeros(n, v+1)

'''初始化dp二维数组'''
for i in range(n):
    dp[i][0] = 0
for i in range(1, v+1):
    if item[0][0] <= i:
        dp[0][i] = item[0][1]
        
for i in range(1, n):
    for j in range(1, v+1):
        if j < item[i][0]:
            dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-item[i][0]] + item[i][1])
print(dp[n-1][v])
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值