当前位置: 首页 > article >正文

蓝桥杯刷题第二天——背包问题

题目描述

有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式

第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有N行,每行两个整数,W,用空格隔开,分别表示第件物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

0< N,V≤ 1000
0<v,W≤1000

解题思路

此题可用动态规划来解决。

1.首先定义一个二维数组组dp[i][j],表示前i个物品放入容量为j的背包中能获得的最大价值。

2.状态转移方程为:dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]],其中v[i] 和 w[i] 分别是第i个物品的体积和价值。这个方程的含义是,对于第i个物品,有两种选择:不放入背包(价值为dp[i-1][j]),或者放入背包(价值为dp[i-1][j-v[i]]+w[i]),取两者中的较大值。

3.边界条件:当i=或=时,dp[i][j]=,即没有物品或者背包容量为0时,最大价值为 0。

代码示例

N, V = map(int, input().split())
dp = [[0] * (V + 1) for _ in range(N + 1)]
for i in range(1, N + 1):
    v, w = map(int, input().split())
    for j in range(1, V + 1):
        dp[i][j] = dp[i - 1][j]
        if j >= v:
            dp[i][j] = max(dp[i][j], dp[i - 1][j - v] + w)
print(dp[N][V])

结果展示


http://www.kler.cn/a/505262.html

相关文章:

  • 【Linux】常见指令(一)
  • <OS 有关>Ubuntu 24 安装 openssh-server, tailscale+ssh 慢增加
  • 项目练习:若依管理系统字典功能-Vue前端部分
  • Python编程与在线医疗平台数据挖掘与数据应用交互性研究
  • Vue 3前端与Python(Django)后端接口简单示例
  • 【2025 Rust学习 --- 17 文本和格式化 】
  • [信息安全] 1. 企业网络安全基础知识
  • Springboot和Es整合
  • 每天五分钟深度学习:神经网络中的激活函数
  • final修饰的用法
  • nVisual智能运维管理:革新机房布线管理,驱动企业数字化转型
  • 《C++11》并发库:简介与应用
  • SQLite Indexed By
  • 3、C#基于.net framework的应用开发实战编程 - 实现(三、一) - 编程手把手系列文章...
  • TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)
  • 【Golang 面试题】每日 3 题(三十二)
  • SQL面试题1:连续登陆问题
  • Jenkins与不同阶段测试的完美结合
  • Github 2025-01-15 C开源项目日报 Top10
  • 【Linux】【文件】读文件的IO操作
  • 海云安开发者安全智能助手D10荣膺 “ AI标杆产品 ” 称号,首席科学家齐大伟博士入选2024年度 “ 十大杰出青年 ”
  • HarmonyOS NEXT开发进阶(七):页面跳转
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题解析
  • 504 Gateway Timeout:网关超时解决方法
  • 线程池底部工作原理
  • Matplotlib 图表显示比例控制笔记