4131:Charm Bracelet(背包问题、动态规划)
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N(1 ≤ N≤ 3,402) available charms. Each charm iin the supplied list has a weight Wi(1 ≤ Wi≤ 400), a 'desirability' factor Di(1 ≤ Di≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M(1 ≤ M≤ 12,880).
Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.
- 输入
- Line 1: Two space-separated integers: N and M
Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di - 输出
- Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints
- 样例输入
-
4 6 1 4 2 6 3 12 2 7
- 样例输出
-
23
- 来源
- USACO 2007 December Silver
-
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int dp[30000]; 5 int w[30000]; 6 int v[30000]; 7 8 int main(){ 9 int n,m; 10 cin>>n>>m; 11 memset(dp,0,sizeof(dp)); 12 for(int i=1;i<=n;i++){ 13 cin>>w[i]>>v[i]; 14 } 15 for(int i=1;i<=n;i++){ 16 for(int j=m;j>=w[i];j--){ 17 dp[j]=max(dp[j],dp[j-w[i]]+v[i]); 18 } 19 } 20 cout<<dp[m]<<endl; 21 return 0; 22 }
问题分析:
转自https://www.cnblogs.com/caiyishuai/p/8945331.html
N 个物品每个物品有价值v[i],重量w[i], 给定背包最大承重M,求背包能够装载的最大价值。每个物品只有放入背包和不放入背包两种选择。
这是典型的0-1背包问题。
代码的时间上限是O(nm), 对于每个物品i, 它所要遍历的整数区间都是[ci, m]
越努力越幸运