/* 解题报告: 0-1背包的祼体,适合初学者练习 下面的代码用了滚动数组,即用一维数组实现的 */ #include <iostream> #include <cstring> using namespace std; int main() { int n, m; int w, d; int i, j; int f[12880]; while(cin>>n>>m) { memset(f, 0, sizeof(f)); for(i=1; i<=n; ++i) { cin>>w>>d; for(j=m; j>=0; --j) { if(j>=w) { if(f[j]<f[j-w]+d) f[j] = f[j-w] + d; } } } cout<<f[m]<<endl; } return 0; }