如题http://poj.org/problem?id=3624
最基础的01背包
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 3500
#define MAXV 13000
#define max(a,b)(a>b?a:b)
int N,M;
int c[MAXN];
int w[MAXN];
int f[MAXV];
int main()
{
scanf("%d%d",&N,&M);
int i,j;
for(i=1;i<=N;i++)
scanf("%d%d",&c[i],&w[i]);
memset(f,0,sizeof(f));
for(i=1;i<=N;i++)
for(j=M;j>=c[i];j--)
f[j]=max(f[j],f[j-c[i]]+w[i]);
printf("%d\n",f[M]);
return 0;
}