0%

poj.3624.Charm Bracelet(动态规划)

0/1背包问题

题目

- 3624.Charm Bracelet

描述

有N个物品,每个物品的价值di和重量wi,背包容量为M,每个物品最多可以装入背包一个,求背包可以装的物品的总价值

公式

dp[j] = dp[j] > dp[j - v[i].weight] + v[i].desirability
? dp[j] : dp[j - v[i].weight] + v[i].desirability;

动态规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
using namespace std;

struct charm
{
int weight;
int desirability;
};
int CharmBracelet(vector<charm>& v, int n, int m)
{
vector<int> dp(m + 1);
dp[0] = 0;
for (int i = 0; i < n; i++)
{
for (int j = m; j >= v[i].weight; j--)
{
dp[j] = dp[j] > dp[j - v[i].weight] + v[i].desirability
? dp[j] : dp[j - v[i].weight] + v[i].desirability;
}
}
return dp[m];
}

int main()
{
int n, m;
cin >> n >> m;
vector<charm> v(n);
for (int i = 0; i < n; i++)
{
cin >> v[i].weight;
cin >> v[i].desirability;
}

int result = CharmBracelet(v, n, m);
cout << result << endl;
return 0;
}