题解 | #【模板】完全背包#
【模板】完全背包
https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc
#include <iostream> #include <vector> using namespace std; int main() { int n, V, v, w; while (cin >> n >> V) { // 注意 while 处理多个 case vector<int> dp1(V + 1, 0), dp2(V + 1, 0); for (int i = 1; i <=n; i++) { cin>>v>>w; for (int j = v; j <= V; j++) { dp1[j] = max(dp1[j], dp1[j - v] + w); if(j==v || dp2[j-v]!=0) dp2[j] = max(dp2[j], dp2[j- v] + w); } } cout << dp1[V] << endl << dp2[V] << endl; } } // 64 位输出请用 printf("%lld")#完全背包简洁版#