题目: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\n",dp[N]);
}
return 0;
}