#include<stdio.h>
int max(int a1,int a2)
{
return a1=a1>a2?a1:a2;
}
struct bag
{
int v;
int pay;
}s[10006];
int dp[10005];
int main()
{
int n,i,j,m,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d%d",&s[i].v,&s[i].pay);
for(i=0;i<=m;i++)
dp[i]=0;
for(i=1;i<=n;i++)
for(j=m;j>=0;j--)//必须从后向前刷新数据
if(j>=s[i].v)
{
dp[j]=max(dp[j],dp[j-s[i].v]+s[i].pay);
}
printf("%d\n",dp[m]);
}
return 0;
}
点击打开链接