QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#701909#7739. Knapsackyumingsk#WA 1ms3784kbC++202.3kb2024-11-02 14:54:032024-11-02 14:54:09

Judging History

你现在查看的是最新测评结果

  • [2024-11-02 14:54:09]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3784kb
  • [2024-11-02 14:54:03]
  • 提交

answer

#pragma GCC optimize(3, "Ofast", "inline")
#include <iostream>
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define INF 0x3f3f3f3f
#define L_INF 0x7f3f3f3f3f3f3f3f
#define db cout << "debug\n";

using namespace std;
const int Mod = 998244353;
using ll = long long;
ll dp[2][10001];
ll f[5005], maxsum[5005], top, maxnn, maxn[5005];

struct Node
{
    ll w, v;
} a[5005];

bool cmp(Node a, Node b)
{
    return a.v < b.v;
}
bool cmp2(ll a, ll b)
{
    return a > b;
}
ll max(ll a, ll b) { return a > b ? a : b; }

void solve()
{
    int n, m;
    int k;
    cin >> n >> m >> k;

    for (int i = 1; i <= n; i++)
    {
        cin >> a[i].v >> a[i].w;
    }
    // for (int i = 0; i <= n; i++)
    // {
    //     for (int j = 0; j <= m; j++)
    //     {
    //         dp[i][j] = INF;
    //     }
    // }
    sort(a + 1, a + n + 1, cmp);
    top = 0;
    maxsum[n + 1] = 0;
    for (int i = n; i > n - k; i--)
    {
        f[n - i + 1] = a[i].w;
        maxsum[i] = maxsum[i + 1] + a[i].w;
    }
    sort(f + 1, f + k + 1, cmp2);
    for (int i = n - k; i > 0; i--)
    {
        if (f[k] >= a[i].w)
            continue;
        maxsum[i] = maxsum[i + 1] + a[i].w - f[k];
        ll o = k;
        while (o > 0 && f[o] < a[i].w)
        {
            f[o + 1] = f[o];
            o--;
        }
        f[o + 1] = a[i].w;
    }
    dp[0][0] = 0;
    ll ans = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (j >= a[i].v)
                dp[i % 2][j] = max(dp[1 - i % 2][j], dp[1 - i % 2][j - a[i].v] + a[i].w);
            else
            {
                dp[i % 2][j] = dp[1 - i % 2][j];
            }
            maxn[i] = max(maxn[i], dp[i % 2][j]);
        }
        maxnn = max(maxnn, maxn[i] + maxsum[i + 1]);
    }
    maxnn = max(maxnn, maxsum[1]);
    cout << maxnn << '\n';
}
int main()
{
    IOS;
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#ifndef ONLINE_JUDGE
    clock_t start_time = clock();
#endif
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }
#ifndef ONLINE_JUDGE
    cout << "Used " << (double)(clock() - start_time) << " ms" << endl;
#endif
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3628kb

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: 3624kb

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: 3744kb

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: 3692kb

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: 3608kb

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: 0ms
memory: 3748kb

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: 1ms
memory: 3784kb

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: 3756kb

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:

39527028047

result:

wrong answer 1st numbers differ - expected: '44747553879', found: '39527028047'