HDU-2602-Bone Collector

链接:https://vjudge.net/problem/HDU-2602#author=0

题意:

给你一个背包,n个物品,每个物品的价值和体积。

求能放进背包的最大价值。

思路:

01背包。

代码:

#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
#include <math.h>

using namespace std;

typedef long long LL;

const int MAXN = 1e3 + 10;

int dp[MAXN];
int a[MAXN];
int b[MAXN];

int main()
{
    int t;
    int n, v;
    scanf("%d", &t);
    while (t--)
    {
        memset(dp, 0, sizeof(dp));
        scanf("%d%d", &n, &v);
        for (int i = 1;i <= n;i++)
            scanf("%d", &a[i]);
        for (int i = 1;i <= n;i++)
            scanf("%d", &b[i]);
        for (int i = 1;i <= n;i++)
        {
            for (int j = v;j >= b[i];j--)
                dp[j] = max(dp[j], dp[j - b[i]] + a[i]);
        }
        printf("%d\n", dp[v]);
    }

    return 0;
}

  

posted @ 2019-03-03 11:11  YDDDD  阅读(154)  评论(0编辑  收藏  举报