蓝桥杯 adv144 01背包

蓝桥杯 adv144 01背包

问题描述

给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个。

输入格式

输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。

以后N行每行两个数Wi和Vi,表示物品的重量和价值

输出格式

输出1行,包含一个整数,表示最大价值。

样例输入

1
2
3
4
3 5
2 3
3 5
4 7

样例输出

8

数据规模和约定

1<=N<=200,M<=5000

参考解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>

using namespace std;

int main() {
int n, m, w, v;
int dp[201][5001];
for (int i = 1; i <= n; ++i) {
cin >> w >> v;
for (int j = 1; j <= m; ++m) {
if (j >= w)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v);
else
dp[i][j] = dp[i-1][j];
}
}
cout << dp[n][m];
return 0;
}

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×