HDU 2602(Bone Collector)基础0-1背包问题

来源:互联网 发布:奢侈品销售 知乎 编辑:程序博客网 时间:2024/05/16 12:12

本题就是最简单的0-1背包问题

代码:

#include<stdio.h>#include<string.h>int dp[1001][1001],v[1001],val[1001];int Max(int a,int b){    return a>b?a:b;}int main(){    int T;    int i,vol,n,vi;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&n,&vol);        memset(dp,0,sizeof(dp));        memset(v,0,sizeof(v));        memset(val,0,sizeof(val));                for(i=0;i<n;i++)            scanf("%d",&val[i]);        for(i=0;i<n;i++)            scanf("%d",&v[i]);        for(vi=0;vi<=vol;vi++)            if(v[0]<=vi) dp[0][vi]=val[0];        for(i=1;i<=n-1;i++)        {            for(vi=0;vi<=vol;vi++)            {                if(v[i]<=vi) dp[i][vi]=Max(dp[i-1][vi-v[i]]+val[i],dp[i-1][vi]);                else dp[i][vi]=dp[i-1][vi];            }        }        printf("%d\n",dp[n-1][vol]);    }    return 0;}


0 0
原创粉丝点击