美文网首页
2018-07-20-01背包入门

2018-07-20-01背包入门

作者: termanary | 来源:发表于2018-07-20 22:24 被阅读0次

题目:HDOJ-2602
主要参考:1
2
3
核心代码:
1:

for(int i = 1; i <= n; i++)
    {
        for(int j = 0; j <= W; j++)
        {
            if(j < w[i])    dp[i][j]  = dp[i-1][j];
            else dp[i][j] =  max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]);
        }
    }

2:

     for(int i=0;i<n;i++)  
    {  
        for(int j=v;j>=0;j--)  
        {  
            if(j>=c[i])  
            dp[j]=max(dp[j-c[i]]+w[i],dp[j]);  
        }  
    }  

各仿照写了一段,一段AC,一段WA,原因不详。
AC:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#define N 1000

int main()
{
    int i,j,n,v,t,va[N],vo[N],*p;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&v);
        for(i=0;i<n;i++)
            scanf("%d",va+i);
        for(i=0;i<n;i++)
            scanf("%d",vo+i);
        p=(int*)calloc(v+1,sizeof(int));
        assert(p);
        for(i=0;i<n;i++)
            for(j=v;j>=vo[i];j--)
                p[j]=p[j]>p[j-vo[i]]+va[i]?p[j]:p[j-vo[i]]+va[i];
        printf("%d\n",p[v]);
        free(p);
    }
    return 0;
}

WA:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#define N 1000

int _max_(int a,int b)
{
    return a>b?a:b;
}

int main()
{
    int t;
    int va[N],vo[N];
    int n,v;
    int i,j;
    int *p;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&v);
        for(i=0;i<n;i++)
            scanf("%d",va+i);
        for(i=0;i<n;i++)
            scanf("%d",vo+i);

        p=(int*)calloc((n+1)*(v+1),sizeof(int));
        assert(p);
        int m=v+1;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=v;j++)
            {
                if(j<vo[i-1])
                {
                    p[i*m+j]=p[(i-1)*m+j];
                }
                else
                {
                    p[i*m+j]=_max_(p[(i-1)*m+j],p[(i-1)*m+j-vo[i-1]]+va[i-1]);
                }
            }
        }
        printf("%d\n",p[(n+1)*(v+1)-1]);
        free(p);

    }
    return 0;
}

相关文章

网友评论

      本文标题:2018-07-20-01背包入门

      本文链接:https://www.haomeiwen.com/subject/emhcmftx.html