当日总结

include

include

include

include

using namespace std;

int main() {
int n, V;
cin >> n >> V;

vector<pair<int, int>> items(n);
for (int i = 0; i < n; ++i) {
    cin >> items[i].first >> items[i].second; // 体积、价值
}

// 方案1:不要求装满背包
vector<int> dp1(V + 1, 0);
for (auto &item : items) {
    int v = item.first;
    int w = item.second;
    for (int j = V; j >= v; --j) {
        dp1[j] = max(dp1[j], dp1[j - v] + w);
    }
}

// 方案2:要求恰好装满背包
vector<int> dp2(V + 1, INT_MIN);
dp2[0] = 0; // 容量为0时,恰好装满的价值为0
for (auto &item : items) {
    int v = item.first;
    int w = item.second;
    for (int j = V; j >= v; --j) {
        if (dp2[j - v] != INT_MIN) {
            dp2[j] = max(dp2[j], dp2[j - v] + w);
        }
    }
}

// 输出结果
cout << dp1[V] << endl;
cout << (dp2[V] != INT_MIN ? dp2[V] : 0) << endl;

return 0;

}
经典01背包

posted @ 2025-09-23 23:47  lagranSun  阅读(6)  评论(0)    收藏  举报