HDU 2602 Bone Collector 【01揹包】

題目:點擊打開鏈接

簡單的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;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章