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]

posted @ 2020-03-29 22:13  瓜瓜爱呱呱  阅读(295)  评论(0编辑  收藏  举报