测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18648. 基础01背包求解

填空题 较难

题目描述

基础01背包求解

题目描述

给定一个背包的最大容量 C,以及 n 个物品,每个物品有对应的重量 w[i] 和价值 v[i]。每个物品只能选择放入背包一次或不放,请求出背包能装载的最大总价值。

输入格式

1. 第一行输入两个整数 n(物品数量)和 C(背包容量),1≤n≤20,1≤C≤100;

2. 第二行输入 n 个整数,代表每个物品的重量;

3. 第三行输入 n 个整数,代表每个物品的价值。

输出格式

输出一个整数,表示背包可装载的最大价值。

样例输入

4 8
2 3 4 5
3 4 5 6

样例输出

9

参考答案

#include <iostream> #include <algorithm> using namespace std; int dp[105]; int w[25], v[25]; int main() { int n, C; cin >> n >> C; for(int i = 1; i <= n; i++) cin >> w[i]; for(int i = 1; i <= n; i++) cin >> v[i]; // 01背包一维核心逻辑 for(int i = 1; i <= n; i++) { for(int j = C; j >= w[i]; j--) { dp[j] = max(dp[j], dp[j - w[i]] + v[i]); } } cout << dp[C] << endl; return 0; }

答案解析

评分标准(50分):

1. 正确完成输入输出、数组定义(10分);

2. 正确写出01背包倒序容量遍历(15分);

3. 状态转移方程书写正确(15分);

4. 代码无bug、样例输出正确、可正常编译运行(10分);

上一题 下一题