BIT 1013 Bone Collector

来源:互联网 发布:linux 两台机器复制 编辑:程序博客网 时间:2024/06/18 14:49

题目大意:给出NN<=1000)根骨头,每个有其体积和价值,再给你一个体积为V的背包,求能装下价值最多多少骨头。

 

考察点:DP

 

思路分析:动态规划。F[j]=max(f[j],f[j-w[i]]+v[i]))

 

#include<stdio.h>#define max(x,y) (x)>(y)?(x):(y)int main(){    int k,t,n,i,j,v;    long int f[1001];long int ans;    long int a[1001];long int w[1001];    scanf("%d",&t);    for (k=1;k<=t;k++)    {      scanf("%d%d",&n,&v);      ans=0;      for (j=1;j<=v;j++)        f[j]=0;      for (i=1;i<=n;i++)        scanf("%d",&a[i]);      for (i=1;i<=n;i++)        scanf("%d",&w[i]);      for (i=1;i<=n;i++)      {        for (j=v;j>0;j--)          {            if (j-w[i]>=0)              f[j]=max(f[j],f[j-w[i]]+a[i]);            if (ans<f[j]) ans=f[j];          }      }      printf("%d\n",ans);    }    return 0;}                                                      


 

 

原创粉丝点击