QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#783226 | #7739. Knapsack | rahmanmehraj | WA | 0ms | 3768kb | C++14 | 1.5kb | 2024-11-26 02:06:26 | 2024-11-26 02:06:26 |
Judging History
answer
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Knapsack function to maximize beauty within a budget
int knapsack(int W, const vector<pair<int, int>>& items) {
vector<int> dp(W + 1, 0); // dp[w] represents max beauty for budget w
for (const auto& [price, beauty] : items) {
for (int w = W; w >= price; --w) {
dp[w] = max(dp[w], dp[w - price] + beauty);
}
}
return dp[W];
}
int main() {
int n, W, k;
cin >> n >> W >> k;
vector<pair<int, int>> gemstones(n); // {price, beauty}
for (int i = 0; i < n; ++i) {
cin >> gemstones[i].first >> gemstones[i].second;
}
int maxBeauty = 0;
for (int mask = 0; mask < (1 << n); ++mask) {
if (__builtin_popcount(mask) == k) { // Check if subset size is exactly k
int freeBeauty = 0, freeCost = 0;
vector<pair<int, int>> remainingGemstones;
for (int i = 0; i < n; ++i) {
if (mask & (1 << i)) {
freeBeauty += gemstones[i].second; // Take this gemstone for free
} else {
remainingGemstones.push_back(gemstones[i]); // Add to items to buy
}
}
// Use knapsack to find max beauty for remaining gemstones
int currentBeauty = freeBeauty + knapsack(W, remainingGemstones);
maxBeauty = max(maxBeauty, currentBeauty);
}
}
cout << maxBeauty << endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
4 10 1 9 10 10 1 3 5 5 20
output:
35
result:
ok 1 number(s): "35"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3600kb
input:
5 13 2 5 16 5 28 7 44 8 15 8 41
output:
129
result:
ok 1 number(s): "129"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3764kb
input:
10 50 1 44 182173741 38 163268500 36 114173760 30 521894533 25 89514235 12 516184197 42 971377551 35 28242326 31 480227821 31 388523197
output:
2009456281
result:
ok 1 number(s): "2009456281"
Test #4:
score: -100
Wrong Answer
time: 0ms
memory: 3768kb
input:
10 100 3 23 51015869 9 981426050 76 243762017 64 128189636 4 718411601 48 250140255 17 340478117 68 262055220 40 370503079 4 547232664
output:
0
result:
wrong answer 1st numbers differ - expected: '3765024872', found: '0'