/*基础dp*/ #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #define maxx 100000+10 using namespace std; struct node{ int weight, value; }NN[maxx]; int dp[maxx]; int main() { int n, m; while(scanf("%d%d", &n ,&m) != EOF){ memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i++){ scanf("%d%d", &NN[i].weight, &NN[i].value); } for(int i = 0; i < n; i++){ for(int j = m; j >= NN[i].weight; j--){ //m为包的最大体积 dp[j] = max(dp[j], dp[j - NN[i].weight] + NN[i].value); } } printf("%d\n", dp[m]); } return 0; }