POJ 3624 Charm Bracelet(01背包 基础)

题意: n个装饰品 容量m的背包

         每个装饰品 重wi 价值 di

        求能装的最大价值

思路:基础01背包

 

#include<stdio.h>

#include<string.h>

#include<math.h>

#include<iostream>

#include<algorithm>

#include<queue>

#include<stack>

#define mem(a,b) memset(a,b,sizeof(a))

using namespace std;



int dp[13880];

int main()

{

    int n,m;

    int i,j;

    int w,d;

    int maxx;

    while(scanf("%d%d",&n,&m)!=EOF)

    {

        mem(dp,-1);

        dp[0]=0;maxx=0;

        while(n--)

        {

            scanf("%d%d",&w,&d);

            for(i=m;i>=w;i--)

            {

                if(dp[i-w]!=-1&&dp[i-w]+d>dp[i])

                {

                    dp[i]=dp[i-w]+d;

                    if(dp[i]>maxx) maxx=dp[i];

                }

            }

        }      

        printf("%d\n",maxx);

    }

    return 0;

}

  

你可能感兴趣的:(char)