poj3624 Charm Bracelet(DP,01背包)

题目链接

http://poj.org/problem?id=3624

题意

有n个手镯,每个手镯有两个属性:重量W,需求因子D。还有一个背包,它能装下总重量不超过M的手镯。现在将一些镯子装入背包,求所装入镯子总需求因子的最大值。

思路

01背包问题,使用动态规划解决。

代码

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 const int N = 3500;
 8 const int M = 12890;
 9 int dp[M];
10 int w[N], d[N];
11 
12 int main()
13 {
14     //freopen("hdoj3624.txt", "r", stdin);
15     int n, m;
16     while (cin >> n >> m)
17     {
18         for (int i = 1; i <= n; i++)
19             cin >> w[i] >> d[i];
20 
21         for (int i = 1; i <= n; i++)
22         {
23             for (int j = m; j >= 1; j--)    //j是逆序
24             {
25                 if (w[i] <= j)
26                     dp[j] = max(dp[j - w[i]] + d[i], dp[j]);
27             }
28         }
29         cout << dp[m] << endl;
30     }
31     return 0;
32 }
原文地址:https://www.cnblogs.com/sench/p/8011598.html