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 inte
GERs: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
Typical dynamic planning problems-0-1 backpacks
DP [I] indicates the maximum value that a backpack with a capacity of V can obtain from the first I items.
Therefore, the state transition equation can be:
dp[j] = dp[j] > (dp[j-d[i]] + w[i]) ? dp[j] : (dp[j-d[i]] + w[i]);
1 #include<stdio.h> 2 #include<string.h> 3 #define N 12888 4 5 int n, m, d[N],w[N], dp[N]; 6 int main() 7 { 8 int i, j; 9 scanf("%d %d", &n, &m);10 for(i = 0; i < n; i++)11 scanf("%d %d", &d[i], &w[i]);12 13 memset(dp, 0, sizeof(dp));14 for(i = 0; i < n; i++)15 for(j = m; j >= d[i]; j--)16 dp[j] = dp[j] > (dp[j-d[i]] + w[i]) ? dp[j] : (dp[j-d[i]] + w[i]);17 18 printf("%d\n", dp[m]);19 }