捡骨头(hdu2602)

来源:互联网 发布:ov7670 51单片机引脚图 编辑:程序博客网 时间:2024/04/27 13:26
题目概述:
一个人捡骨头,他有一个包,包有最大容量,骨头有体积和价值。求在包承受范围内能获得的最大价值。
题目思路:
典型背包问题,赤裸裸的0/1背包…… 


#include<iostream>#include<cstring>#include<cstdio>using namespace std;bool f[1010];int ans[1010],a[1010],b[1010];int max(int a,int b){    return a>b?a:b;}int main(){    int t,n,v;    cin>>t;    while (t--)    {        cin>>n>>v;        for (int i=1;i<=n;i++) scanf("%d",&b[i]);        for (int i=1;i<=n;i++) scanf("%d",&a[i]);        memset(f,0,sizeof(f));        memset(ans,0,sizeof(ans));        f[0]=1;        for (int i=1;i<=n;i++)            for (int j=v-a[i];j>=0;j--)                if (f[j])                {                    f[j+a[i]]=1;                    ans[j+a[i]]=max(ans[j+a[i]],ans[j]+b[i]);                }        int tmp=0;        for (int i=v;i>=0;i--)            if (tmp<ans[i]) tmp=ans[i];        printf("%d\n",tmp);    }}


0 0
原创粉丝点击