結果

問題 No.3076 Goodstuff Deck Builder
ユーザー NortGlG
提出日時 2025-04-20 10:56:10
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 29 ms / 3,000 ms
コード長 840 bytes
コンパイル時間 1,998 ms
コンパイル使用メモリ 195,408 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-04-20 10:56:15
合計ジャッジ時間 4,128 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 36
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
struct A {
    int v, w;
    bool operator < (const A& o) const {
        return w < o.w;
    }
} a[10010];
ll dp[2][10000010];
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, m;
    cin >> n >> m;
    for (int i = 1;i <= n;i++) {
        cin >> a[i].w >> a[i].v;
    }
    sort(a + 1, a + 1 + n);
    for (int i = 1;i <= n;i++) {
        int now = i & 1, prev = 1 - now;
        for (int j = 0;j <= m;j++) {
            dp[now][j] = max(dp[prev][j], dp[now][j - 1]);
            // 2 * x + w = j
            if (j < a[i].w) continue;
            if ((j + a[i].w) % 2 == 1) continue;
            int x = (j - a[i].w) / 2;
            dp[now][j] = max(dp[now][j], dp[prev][x] + a[i].v);
        }
    }
    cout << dp[n & 1][m] << '\n';
    return 0;
}
0