Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 85 Accepted Submission(s) : 43
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 i in 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
#include<stdio.h>
#include<string.h>
#define max(a,b)(a>b?a:b)
int a[20000], b[20000]; // a 价值 b 体积
int c[20000];
int main()
{
int i, j, n, v;
//freopen("\\1.in","r",stdin);
while (scanf("%d%d", &n, &v)!=EOF) // n 种类 v 体积
{
for (i = 1; i <= n; i++)
{
scanf("%d%d", &b[i],&a[i]);
}
memset(c, 0, sizeof(c));
// 不同体积下选物品体积
for (j = 1; j <= n; j++) // 种类
{
for (i = v; i >= b[j]; i--) // 包现放的物品体积
{
c[i] = max(c[i], c[i - b[j]] + a[j]);
}
}
printf("%d\n", c[v]);
}
return 0;
}