#include <iostream> #include <unordered_map> #include <vector> using namespace std; int main() { int a;//几组数据 cin >> a; // 注意 while 处理多个 case while (a) { int n, m; cin >> n >> m; int w_vec[n+1];//体积数组 int v_vec[n+1];//价值数组 for (int i = 1; i < n + 1; i++) { cin >> w_vec[i] >> v_vec[i]; } int dp[n + 1][m + 1]; //1、初始化dp[0][i] for (int j = 1; j < m + 1; j++) { dp[0][j] = -1; } dp[0][0] = 0; //2、状态转移 for (int i = 1; i < n + 1; i++) { for (int j = 0; j <m + 1; j++) { if (j >= w_vec[i]) { dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w_vec[i]]+ v_vec[i]); } else { dp[i][j] = dp[i - 1][j]; } } } int ans=0; for(int j=0;j<=m;j++){ ans = max(ans,dp[n][j]); } a--; cout << ans << endl; } return 0; } // 64 位输出请用 printf("%lld")