HDU 2602 Bone Collector 【01背包】

来源:互联网 发布:焦大seo教程 编辑:程序博客网 时间:2024/06/15 05:48

题目:点击打开链接

简单的01背包

状态转移方程  f[j] = max(f[j],f[j-c[i]]+w[i]);

 

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;int max(int a, int b){    return a>b?a:b;}int main(){    int T;    int c[1010],w[1010],f[1010];    scanf("%d",&T);    while(T--)    {        int n,v,i,j;        scanf("%d %d",&n, &v);        memset(f,0,sizeof(f));        for(i=1;i<=n;i++)            scanf("%d",&w[i]);        for(i=1;i<=n;i++)            scanf("%d",&c[i]);        for(i=1;i<=n;i++)            for(j=v;j>=c[i];j--)                f[j] = max(f[j],f[j-c[i]]+w[i]);        printf("%d\n",f[v]);    }    return 0;}


 

0 0
原创粉丝点击