- 题目链接 : Bone Collector
题意:
给定n, v . 表示有n个物品, 和一个最大承重为v的背包,给出n个物品,每个物品的价值和重量. 问这个背包最多获得多少价值
解法: 01背包,裸题
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a; i<=b; ++i)
#define repp(i,a,b) for(int i=b; i>=a; --i)
#define mp make_pair
#define pb push_back
#define ms(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int>vi;
const int maxn = 1e3+7;
int val[maxn], w[maxn];
int dp[maxn];
void zopack(int n, int v){
ms(dp, 0);
rep(i, 1, n){
repp(j, w[i], v){
dp[j] = max(dp[j], dp[j-w[i]]+val[i]);
}
}
return ;
}
int main(){
// freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--){
int n, v;
scanf("%d %d", &n, &v);
rep(i, 1, n) scanf("%d", &val[i]);
rep(i, 1, n) scanf("%d", &w[i]);
zopack(n , v);
printf("%d\n", dp[v]);
}
return 0;
}