2018-07-20-01背包入门

题目: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=0;j--)  
        {  
            if(j>=c[i])  
            dp[j]=max(dp[j-c[i]]+w[i],dp[j]);  
        }  
    }  

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

#include
#include
#include

#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=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
#include
#include

#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

你可能感兴趣的:(2018-07-20-01背包入门)