#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 100;
int n,W;
int w[MAX],v[MAX];
int book[100][100];
int rec(int i,int j){
if(book[i][j] >= 0) return book[i][j];
int res;//价值
if(i == n) res = 0;
else if(j < w[i]) res = rec(i+1,j);
else res = max(rec(i+1,j),rec(i+1,j-w[i])+v[i]);
return book[i][j] = res;
}
int main()
{
memset(book,-1,sizeof(book));
cin>>n>>W;
for(int i=1;i<=n;i++)
cin>>w[i]>>v[i];
cout<<rec(0,W);
return 0;
}
01背包问题
最新推荐文章于 2024-06-17 00:06:23 发布