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;

}

 

你可能感兴趣的:(poj)