0-1背包问题
2024-10-04
315
0 - 1 背包问题是一个经典的组合优化问题,具有广泛的应用,以下是关于它的详细介绍:一、问题描述基本设定有一个容量为的背包。有个物品,每个物品()有其重量和价值。对于每个物品,只能选择放入背包(选择 1)或者不放入背包(选择 0),这就是 “0 - 1” 名称的由来。目标在满足背包容量限制的前提下,选择一些物品放入
0 - 1 背包问题是一个经典的组合优化问题,具有广泛的应用,以下是关于它的详细介绍:
一、问题描述
二、解决方法
三、应用场景
模板:
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是v[i],得到的价值是w[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
#include <bits/stdc++.h>
using namespace std;
int n, V, ans, v[1005], w[1005];
int dp[1005];
// 状态定义 dp[i][j]表示讨论第i个物品,背包容量为j时,能取到的最大价值
// 状态转移方程 dp[i][j] = max(dp[i-1][j], dp[i-1][j-v[i]] + w[i]);
// 常用滚动数组优化一维 dp[j] = max(dp[j], dp[j-v[i]] + w[i]);
int main() {
cin >> n >> V;
for (int i = 1; i <= n; i++) {
cin >> v[i] >> w[i];
}
for (int i = 1; i <= n; i++) {
for (int j = V; j >= v[i]; j--) {
dp[j] = max(dp[j], dp[j-v[i]] + w[i]);
}
}
cout << dp[V];
return 0;
}
上一篇:深搜与广搜的C++模板
下一篇:完全背包
推荐阅读
山东省青少年科技辅导员创新能力提升活动
凌志编程机器人培训学校全体教师参加山东省青少年科···
淄博市第七届智力运动会
由淄博市教体局,淄博市科协主办,凌志编程机器人培···
不同地区创客空间建设有何优势
创客空间建设 能够给人们分享各种乐趣,通过电脑,···
深层解析何为创客教育
在了解创客教育之前,我们首先了解下何为创客。创客···
相关案例