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

题目描述

有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])

结果展示

相关推荐
haiyu_y3 分钟前
Day 36 MLP神经网络的训练
python·深度学习·神经网络
rockingdingo5 分钟前
利用 OneKey MCP Router Python SDK构建多领域大模型Function Call多工具调用数据集
网络·windows·python·ai agent·mcp
我送炭你添花7 分钟前
Pelco KBD300A 模拟器:01.Pelco 协议前世今生 & KBD300A 键盘基础解析
网络·python·计算机外设·pyqt
Lethehong8 分钟前
首发实践:在昇腾NPU上从零部署与深度评测Mistral-7B-v0.3全流程
人工智能·pytorch·python·昇腾atlas 800t·mistral-7b-v0.3
qq_3561969512 分钟前
day35文件的规范拆分和写法@浙大疏锦行
python
胡桃不是夹子16 分钟前
安装deb文件并加入到菜单
python
黑客思维者24 分钟前
PyAutoGUI 模拟鼠标键盘:原理解析 + 工程实践案例 + 踩坑指南
python·pyautogui
努力的BigJiang24 分钟前
D435i相机-使用红外双目模式记录
python
旧梦吟25 分钟前
脚本 手机跑.简易go服务器
python·golang·css3
aprilaaaaa29 分钟前
(HaloOS 基于TC397学习笔记)一、环境搭建到编译demo成功
python·学习·dds·tc397