题目链接
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 }