#include <iostream>
#include<cstring>
using namespace std;
int dp[1010],dp2[1010];
int v[1010],w[1010];
int main() {
int n,V;cin>>n>>V;
for(int i = 1;i<=n;i++){
cin>>v[i]>>w[i];
}
// for(int i = 1;i<=n;i++){
// for(int j = 1;j<=V;j++){
// if(v[i]>j){
// dp[i][j] = dp[i-1][j];
// }
// else{
// dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]);
// }
// }
// }
for(int i = 1;i<=n;i++){
for(int j = v[i];j<=V;j++){
dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
}
}
memset(dp2, -0x3f, sizeof dp2);
dp2[0] = 0;
for(int i = 1;i<=n;i++){
for(int j = v[i];j<=V;j++){
dp2[j] = max(dp2[j],dp2[j-v[i]]+w[i]);
}
}
cout<<dp[V]<<'\n';
if(dp2[V]<0){
cout<<0<<'\n';
}
else{
cout<<dp2[V];
}
return 0;
}
// 64 位输出请用 printf("%lld")
不知道为什么二维的过不了,希望大佬指出,使用一维可以过。



京公网安备 11010502036488号