蓝桥 python笔记13——01背包、完全背包、多重背包、二维费用背包、分组背包

目录

01背包

完全背包

多重背包

二维费用背包

分组背包


01背包

N,V=map(int,input().split())
#dp[N][V]表示N数量和V容积下,背包的价值最大值
dp=[[0]*(V+1) for _ in range(N+1)]

for i in range(1,N+1):
    wi,vi=map(int,input().split())
    for j in range(0,V+1):
        if j<wi:
           dp[i][j]=dp[i-1][j]
        else:
            dp[i][j]=max(dp[i-1][j],dp[i-1][j-wi]+vi)
print(dp[N][V])

滚动数组优化:

N,V=map(int,input().split())
dp=[0]*(V+1)

for i in range(1,N+1):
  w,v=map(int,input().split())
  #当j小于w时,放不下当前的物品,所以无需更新
  for j in range(V,w-1,-1):
    dp[j]=max(dp[j],dp[j-w]+v)
print(dp[V])

完全背包

N,V=map(int,input().split())
dp=[[0]*(V+1) for _ in range(N+1)]

for i in range(1,N+1):
    wi,vi=map(int,input().split())
    for j in range(0,V+1):
        if j<wi:
            dp[i][j]=dp[i-1][j]
        else:
            dp[i][j]=max(dp[i-1][j],dp[i][j-wi]+vi)
print(dp[N][V])

N,V=map(int,input().split())
dp=[0]*(V+1)

for i in range(1,N+1):
  w,v=map(int,input().split())
  #当j小于w时,放不下当前的物品,所以无需更新
  for j in range(w,V+1):
    dp[j]=max(dp[j],dp[j-w]+v)
print(dp[V])

多重背包

二维费用背包

#N是数量,V是容积,M是质量
N,V,M=map(int,input().split())
#滚动数组是:dp[V][M]
dp=[[0]*(M+1) for _ in range(V+1)]

for i in range(1,N+1):
    # vi体积,mi重量,wi价值
    vi,mi,wi=map(int,input().split())
    # 体积为j,从大到小
    for j in range(V,vi-1,-1):
        #重量为k,从大到小
        for k in range(M,mi-1,-1):
            #dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-vi][k-mi]+wi)
            dp[j][k]=max(dp[j][k],dp[j-vi][k-mi]+wi)
print(dp[V][M])

分组背包

相关推荐

  1. 动态规划-背包问题-费用背包 & 分组背包

    2024-03-28 12:32:06       34 阅读
  2. 完全背包总结

    2024-03-28 12:32:06       30 阅读
  3. 01背包完全背包

    2024-03-28 12:32:06       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 12:32:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 12:32:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 12:32:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 12:32:06       20 阅读

热门阅读

  1. MyBatis的核心配置文件

    2024-03-28 12:32:06       18 阅读
  2. 洛谷 P1923 求第k小的数

    2024-03-28 12:32:06       20 阅读
  3. Redis为什么在6.0之后变成了多线程

    2024-03-28 12:32:06       15 阅读
  4. 在VUE页面调用Extjs中定义的方法

    2024-03-28 12:32:06       17 阅读
  5. 经营分析要干的几件事

    2024-03-28 12:32:06       20 阅读
  6. Springboot vue elementui仓库管理系统

    2024-03-28 12:32:06       19 阅读
  7. 【MySQL】14. 全文索引(选学)

    2024-03-28 12:32:06       18 阅读