01背包

来源:互联网 发布:powermill详细编程步骤 编辑:程序博客网 时间:2024/06/05 23:55
#include<iostream>using namespace std;int max(int a, int b){    if(a > b)        return a;    else        return b;}int main(){    int t, n, v,k, i;    int c[1000], w[1000];    int f[1000];    scanf("%d",&t);    while(t--)//表示测试的个数    {        memset(f,0,sizeof(f));        scanf("%d%d",&n,&v);//n件物品,容量为V        for(i = 0; i < n; i++)            scanf("%d",&c[i]);//第i件物品体积大小为c[i]        for(i = 0; i < n; i++)            scanf("%d",&w[i]);//第i件物品价值w[i]        for(i = 0; i < n; i++)        {            //f[k]容量为k的背包当前装入物品的最大价值,k < c[i] if k = 2 c[i] = 3 就是容量为2的背包不能装容量为3的物品,所以k要大于等于c[i]            for(k = v;  k >= c[i]; k--)                             f[k] = max(f[k], f[k-c[i]]+w[i]);//先算这里面最大的一个赋给f[k]        }    }    cout<<f[v]<<endl;    return 0;}
原创粉丝点击