mltang

博客园 首页 新随笔 联系 订阅 管理

题目:   一个容量有限的背包,n个物品,每个物品占用一定的容量并且有一定的价值,问背包最多装多少价值

输入

1        一组样例

5 10       5个物品  10的背包容量

1 2 3 4 5     每个物品的价值

5 4 3 2 1     每个物品的重量

 

这个就是最基本的背包问题

 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int maxn = 1005;
long long value[maxn];
long long vol[maxn];
long long dp[maxn][maxn];
int main()
{
    int T,n,v,i,j;
    scanf("%d",&T);
    while(T --)
    {
        memset(dp, 0, sizeof(dp));
        scanf("%d%d",&n,&v);
        for(i = 1; i <= n; ++i)
            scanf("%lld",value+i);
        for(i = 1; i <= n; ++i)
            scanf("%lld",vol+i);
        
        for(i = 1; i <= n; ++i)
        {
            for(j = 0; j <= v; ++j)
            {
                dp[i][j] = dp[i-1][j];
                if(vol[i] <= j)
                    dp[i][j] = max(dp[i][j],dp[i-1][j-vol[i]] + value[i]);
            }
        }
        printf("%lld\n",dp[n][v]);
    }
}

 

posted on 2018-04-03 21:49  mltang  阅读(95)  评论(0编辑  收藏  举报