/*
Made by Karen
14:58p.m. at Mar.7,2012
01背包
*/
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int main()
{
int n,m,i,j;
int f[12881],w[3500],d[3500];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&d[i]);
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
for(j=m;j>=1;j--)
if(j>=w[i])
f[j]=max(f[j],f[j-w[i]]+d[i]);
cout<<f[m]<<endl;
}
return 0;
}
这是一道入门的01背包的题目,有N件物品和一个容量为M的背包,求背包价值的最大和。
由于没有要求必须装满背包,所以在初始化时只需将f[i]全部初始化为0即可。
生词:
bracelet 手镯
constraint 限制
deduce 推论