杭电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\n", dp[V]); 37 } 38 return 0; 39 }