POJ 3624

背包问题,在定容量的背包中放入物体求装满价值最大。
因为每种物体数量只有1,故只有放与不放。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 3410
#define M 13000
int dp[M];

int main()
{
    int n,m;
    int val[M],w[N];
    while(~scanf("%d%d",&n,&m))
    {
        memset(dp,0,sizeof(dp));

        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&w[i],&val[i]);
        }

        for(int i=1;i<=n;i++)
        {
            for(int j=m;j>=w[i];j--)
            {
                dp[j]=max(dp[j-w[i]]+val[i],dp[j]);
            }
        }
        printf("%d\n",dp[m]);
    }
    return 0;
}

 

posted @ 2014-04-04 11:58  霖‘  阅读(193)  评论(0编辑  收藏  举报