sdau三 1017

来源:互联网 发布:微信封号 知乎 编辑:程序博客网 时间:2024/06/05 02:31

问题:

骨头收集者。输入n,有n组事例,每组事例中有s个骨头,收集者有个能装m重量骨头的包,每个骨头都有重量与价值,求装入包中骨头最大价值。

simple input:

15 101 2 3 4 55 4 3 2 1
simple output:

14

分析:

基础01背包,直接套模板

代码:

#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;long long d[1001];int n[1001],v[1001];//n,骨头所占体积,v,骨头的价值。d,备忘录int main(){    //freopen("s.txt","r",stdin);    int i,t,j;    cin>>t;    while(t--){        memset(n,0,sizeof(n));        memset(v,0,sizeof(v));        memset(d,0,sizeof(d));        int n1,v1;//n1,骨头的个数,v1,背包的容积        cin>>n1>>v1;        for(i=1;i<=n1;i++)            cin>>v[i];        for(i=1;i<=n1;i++)            cin>>n[i];        for(i=1;i<=n1;i++){            for(j=v1;j>=n[i];j--){                d[j]=max(d[j],d[j-n[i]]+v[i]);            }        }        cout<<d[v1]<<endl;    }    return 0;}


0 0
原创粉丝点击