hdu 2602 01背包


题意:输入:第一行包含两个整数N,V,(N < = 1000,v< = 1000)代表骨骼的数量和他的包的体积。
      和第二行包含N个整数的值代表每个骨头的价值。第三行包含N个整数代表每个骨头的体积。
     输出:可以装进包的最大价值。
分析:与贪心不同的是每种物品只有一件,只能选择放或不放,不能分割。
 
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
    int n,m,t,i,j;
    int a[1000],b[1000];
    scanf("%d",&t);
    while(t--)
    {
        int dp[100000]= {0};
        scanf("%d%d",&n,&m);
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);//价值
        for(i=0; i<n; i++)
            scanf("%d",&b[i]);//体积
        for(i=0; i<n; i++)
            for(j=m; j>=b[i]; j--)     //逆序
                dp[j]=max(dp[j],dp[j-b[i]]+a[i]);
        printf("%d\n",dp[m]);
    }
    return 0;
}

你可能感兴趣的:(hdu 2602 01背包)