QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#783559 | #7739. Knapsack | wpoem | WA | 1ms | 4240kb | C++23 | 1.4kb | 2024-11-26 10:37:35 | 2024-11-26 10:37:35 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define sz(x) (signed)size(x)
#define w first
#define v second
void solve() {
int n, W, k;
cin >> n >> W >> k;
vector<pii> items(n + 1);
for (int i = 1; i <= n; ++i)
cin >> items[i].w >> items[i].v;
sort(items.begin() + 1, items.end(), [](const auto& x, const auto& y) {
if (x.v != y.v) return x.v < y.v;
return x.w > y.w;
});
vector dp(n + 1, vector<ll>(W + 1, - 1e18));
dp[0][0] = 0;
for (int i = 1; i <= n; ++i) {
dp[i] = dp[i - 1];
for (int j = W; j >= items[i].w; --j)
dp[i][j] = max(dp[i][j], dp[i - 1][j - items[i].w] + items[i].v);
}
for (int i = 0; i <= n; ++i)
for (int j = 1; j <= W; ++j)
dp[i][j] = max(dp[i][j], dp[i][j - 1]);
ll ans = dp[n][W], cur = 0;
int buy = 0;
multiset<int> free;
for (int i = n; i > 0; --i) {
cur += items[i].v;
free.emplace(items[i].w);
if (sz(free) > k) {
buy += *free.begin();
free.erase(*free.begin());
}
if (buy > W) break;
ans = max(ans, cur + dp[i - 1][W - buy]);
}
cout << ans << '\n';
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
solve();
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3652kb
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: 3784kb
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: 3512kb
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: 0
Accepted
time: 0ms
memory: 3624kb
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:
3765024872
result:
ok 1 number(s): "3765024872"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3836kb
input:
10 500 10 430 981427684 100 458631577 32 453298334 393 716958962 82 120486064 393 561149128 182 518807793 293 950335710 332 159193263 331 280711850
output:
5201000365
result:
ok 1 number(s): "5201000365"
Test #6:
score: 0
Accepted
time: 1ms
memory: 3712kb
input:
10 3000 10 1325 563890842 2007 190665722 1393 874490922 548 279594682 1380 155046921 2666 894516819 770 740325614 2735 643777488 2451 754155860 1068 138544189
output:
5235009059
result:
ok 1 number(s): "5235009059"
Test #7:
score: 0
Accepted
time: 0ms
memory: 4240kb
input:
10 10000 5 108 735534045 6250 87364128 3071 66920092 9343 555321302 9070 759896065 9843 146885261 3083 364637443 7088 370871572 7802 754417134 3125 697204945
output:
4451687859
result:
ok 1 number(s): "4451687859"
Test #8:
score: -100
Wrong Answer
time: 0ms
memory: 3708kb
input:
100 50 61 24 517916473 33 497071404 40 343150837 13 559776223 2 941245278 27 987936903 7 403293890 26 68412861 28 683505315 6 173482637 31 220799032 29 815472376 42 426462445 25 470177395 43 818534622 26 137556071 15 308105056 27 745044655 28 309413241 11 61130780 36 963194467 19 701095156 5 9347020...
output:
45743385015
result:
wrong answer 1st numbers differ - expected: '44747553879', found: '45743385015'