Charm bracelet
Time limit:1000 ms |
|
Memory limit:65536 K |
Total submissions:13977 |
|
Accepted:6381 |
Description
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 fromN(1 ≤N≤ 3,402) Available charms. Each charmIIn the supplied list has a weightWi(1 ≤Wi≤ 400), a 'inclurability 'factorDi(1 ≤Di≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no moreM(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.
Input
* Line 1: two space-separated integers:NAndM
* Lines 2 ..N+ 1: LineI+ 1 describes charmIWith two space-separated integers:WiAndDi
Output
* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints
Sample Input
4 61 42 63 122 7
Sample output
23
Source
Usaco 2007 December silver simple 01 backpack, start practicing backpack
/* Simple 01 backpack */ # Include <Stdio. h> # Include <Iostream> # Include < String . H> # Include <Algorithm> Using Namespace STD; Const Int Maxn = 3500 ; Int DP [ 13000 ]; Int Value [maxn]; // Price per bag Int Weight [maxn]; // Weight per bag Int Nvalue, nkind; // 0-1 backpack, the cost is cost, and the value obtained is weight Void Zeroonepack ( Int Cost,Int Weight ){ For ( Int I = nvalue; I> = cost; I -- ) DP [I] = Max (DP [I], DP [I-cost] + Weight );} Int Main (){ While (Scanf ( " % D " , & Nkind, & nvalue )! = EOF ){ For (Int I = 0 ; I <nkind; I ++) scanf ( " % D " , & Value [I], & Weight [I]); memset (DP, 0 , Sizeof (DP )); For ( Int I = 0 ; I <nkind; I ++ ) Zeroonepack (value [I], weight [I]); printf ( " % D \ n " , DP [nvalue]);} Return 0 ;}