杭电2602_01背包

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602

题目大意:n个物品, 背包容量V, 一行为每个物品的价值, 下一行为每个物品的体积, 问背包能装的最大的价值是多少?

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <cstdlib>
 6 #include <cmath>
 7 #include <set>
 8 #include <map>
 9 #include <vector>
10 using namespace std;
11 
12 int max(int a, int b)
13 {
14     return a > b ? a : b;
15 }
16 int dp[1010];
17 int main()
18 {
19     int t, n, V, i, j, p[1010], v[1010];
20     scanf("%d", &t);
21     while(t--)
22     {
23         scanf("%d %d", &n, &V);
24         for(i = 1; i <= n; i++)
25             scanf("%d", p + i);
26         for(i = 1; i <= n; i++)
27             scanf("%d", v + i);
28         memset(dp, 0, sizeof(dp));
29         for(i = 1; i <= n; i++)
30         {
31             for(j = V; j >= v[i]; j--)
32             {
33                 dp[j] = max(dp[j], dp[j - v[i]] + p[i]);
34             }
35         }
36         printf("%d
", dp[V]);
37     }
38     return 0;
39 }