#include <climits> #include <iostream> #include <vector> using namespace std; int main() { int n,V; cin>>n>>V; vector<vector<int>> arr(n,vector<int>(2,0)); for(int i=0;i<n;i++){ cin>>arr[i][0]>>arr[i][1]; } //dp1[i]表示容量i所能装的最大价值 vector<int> dp1(V+1,0); for(int i=0;i<n;i++){ int v=arr[i][0]; for(int j=v;j<=V;j++){ //同类物品刷新多次 dp1[j]=max(dp1[j],dp1[j-v]+arr[i][1]); } } cout<<dp1[V]<<endl; //dp2[i]表示背包恰好装容量i,所能装的最大价值 vector<int> dp2(V+1,INT_MIN); dp2[0]=0; for(int i=0;i<n;i++){ int v=arr[i][0]; for(int j=v;j<=V;j++){ if(dp2[j-v]!=INT_MIN){ dp2[j]=max(dp2[j],dp2[j-v]+arr[i][1]); } } } cout<<(dp2[V]==INT_MIN? 0:dp2[V])<<endl; return 0; } // 64 位输出请用 printf("%lld")