分析:这是一个0-1背包的问题。
#include<stdio.h>
#include<string.h>
int main()
{
int N,M,W[3500],D[3500],dp[20000];
while (scanf("%d%d",&N,&M)!=EOF)
{
//输入数据
for(int i=1;i<=N;i++)
scanf("%d%d",&W[i],&D[i]);
//数据初始化
memset(dp,0,sizeof(dp));
//利用递推方程推导
for(int i=1;i<=N;i++)
for(int j=M;j>=W[i];j--)
dp[j]=dp[j]>dp[j-W[i]]+D[i]?dp[j]:dp[j-W[i]]+D[i];
printf("%d
",dp[M]);
} return 0;
}