最裸的01背包啦,不过呢脑子进水一不小心多敲了个-1很是郁闷的对着那么几行代码纳闷了好久。。
#include<iostream>
#include<stdio.h>
#include<string.h>
int max(int x,int y)
{
return x>y?x:y;
}
int value[40000],W[40000],D[40000];
int main()
{
int N,M;
while(scanf("%d%d",&N,&M)!=EOF)
{
memset(value,0,sizeof(value));
for(int i=0;i<N;i++)
scanf("%d%d",&W[i],&D[i]);
for(int i=0;i<N;i++)
{
for(int j=M;j>=W[i];j--)
{
value[j]=max(value[j],value[j-W[i]]+D[i]);
}
}
}
printf("%d\n",value[M]);
return 0;
}