01背包-hdu-2602 Bone Collector

来源:互联网 发布:linux启动oracle应用 编辑:程序博客网 时间:2024/05/22 02:01

题意:

T组数据

N个石头,VOC背包容量。

第一行石头价值

第二行石头花费

二维的:

#include <iostream>#include <algorithm>#include <stdio.h>#include <cstring>using namespace std;int dp[1005][1005];int val[1005];int price[1005];int main(){    int T;    cin>>T;    while(T--)    {        int n,voc;        cin>>n>>voc;        for(int i=1;i<=n;i++)            scanf("%d",&val[i]);        for(int i=1;i<=n;i++)            scanf("%d",&price[i]);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++)        {            for(int j=0;j<=voc;j++)            {                if(price[i]>j)                    dp[i][j]=dp[i-1][j];                else                dp[i][j]=max(dp[i-1][j],dp[i-1][j-price[i]]+val[i]);            }        }        cout<<dp[n][voc]<<endl;    }    return 0;
一维的;

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cstring>
using namespace std;
int dp[1005];
int val[1005];
int price[1005];
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,voc;
        cin>>n>>voc;
        for(int i=1;i<=n;i++)
            scanf("%d",&val[i]);
        for(int i=1;i<=n;i++)
            scanf("%d",&price[i]);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            for(int j=voc;j>=price[i];j--)
            {
                dp[j]=max(dp[j],dp[j-price[i]]+val[i]);
            }
        }
      cout<<dp[voc]<<endl;
    }
    return 0;
}

0 0