题解 | #【模板】01背包#
【模板】01背包
https://www.nowcoder.com/practice/fd55637d3f24484e96dad9e992d3f62e
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n,V,v[N],w[N],dp1[N],dp2[N];
int main(){
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 = V;j>=v[i];j--){
dp1[j] = max(dp1[j],dp1[j-v[i]]+w[i]);
}
}
for(int i = 1;i<=n;i++){
for(int j = V;j>=v[i];j--){
if(j-v[i]&&!dp2[j-v[i]]) continue;
dp2[j] = max(dp2[j],dp2[j-v[i]]+w[i]);
}
}
cout<<dp1[V]<<"\n"<<dp2[V];
return 0;
}