#include <iostream>
#include<cstring>
#include <stdio.h>
using namespace std;
#define MAX_V (4000+1)
#define MAX_F (13000+1)
int n,m;
int W[MAX_V];
int D[MAX_V];
int F[MAX_F];
int main()
{
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
{
cin>>W[i]>>D[i];
}
memset(F,0,sizeof(F));
for(int i=1;i<=n;i++)
{
for(int v=m;v>=W[i];v--)
{
if( F[ v - W[i] ] + D[i] > F[v])
F[v] = F[ v - W[i] ] + D[i];
}
}
int maxi = -1;
for(int v=m;v>=0;v--)
if(F[v] > maxi)
maxi = F[v];
cout<<maxi<<endl;
}
}
poj 3624 最基本01背包问题
最新推荐文章于 2021-02-27 19:37:42 发布