0-1背包问题

POJ 3624

上午看书累了,水了一道基础的01背包问题。

二维的dp不行,超出规定的内存了,所以改成了一维的dp。

代码如下:

#include <stdio.h>
#include <string.h>
#define N 3500
#define M 13000
int d[N],w[N],val[M],n,W;
int main()
{
    scanf("%d%d",&n,&W);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&w[i],&d[i]);

    memset(val,0,sizeof(val));
    for(int i=1;i<=n;i++)
        for(int j=W;j>=1;j--)
        {
            if(j>=w[i]&&val[j-w[i]]+d[i]>val[j])
                val[j]=val[j-w[i]]+d[i];
        }
    printf("%d\n",val[W]);
    
    return 0;
}

 

你可能感兴趣的:(0-1背包问题)