HDU2602 Bone Collector(01背包)

HDU2602 Bone Collector

01背包模板题

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

#define maxn 1005

int w[maxn], v[maxn], f[maxn];
int N, V, T;

int _max(int a, int b){
    if(a > b) return a;
    else return b;
}

int main()
{
    scanf("%d", &T);
    while(T--)
    {
        int i, j;
        scanf("%d%d", &N, &V);
        for(i = 0; i < N; i++){
            scanf("%d", &v[i]);
        }
        for(i = 0; i < N; i++){
            scanf("%d", &w[i]);
        }
        memset(f, 0, sizeof(f));
        for(i = 0; i < N; i++){
            for(j = V; j >= w[i]; j--){
                f[j] = _max(f[j], f[j - w[i]] + v[i]);
            }
        }
        printf("%d\n", f[V]);
    }
    return 0;
}

posted on 2019-08-29 17:10  solvit  阅读(114)  评论(0)    收藏  举报

导航