RQNOJ--2 开心的金明(01背包)

题目:http://www.rqnoj.cn/problem/2

分析:这个题目每一种物品都是有"选"或"不选"两种情况。
属于01背包问题。物品的价格相当于背包问题的"花费",
限定的总钱数是"背包容量"。这里每种物品的效益就是 v[i]*p[i]。
#include<stdio.h>
#include<string.h>

int dp[30001],N;

void ZeroOnePack(int c,int w)
{
  for(int i=N;i>=c;i--)
    dp[i]=dp[i]>dp[i-c]+w?dp[i]:dp[i-c]+w;
}

int main()
{
  int m,v[26],p[26];
  while (scanf("%d%d",&N,&m)!=EOF)
  { 
    //读取数据
    for(int i=1;i<=m;i++)
      scanf("%d%d",&v[i],&p[i]);
    //数据初始化 不要求“装满”
    memset(dp,0,sizeof(dp));

    for(int i=1;i<=m;i++)
      ZeroOnePack(v[i],v[i]*p[i]);

    printf("%d ",dp[N]);
  }
  return 0;
}





原文地址:https://www.cnblogs.com/gt123/p/3458047.html