HDU Bone Collector (01背包,裸题)

来源:互联网 发布:泰州网络公关技巧 编辑:程序博客网 时间:2024/06/05 08:04
  • 题目链接 : 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;}