結果

問題 No.3302 Sense Battle
コンテスト
ユーザー InTheBloom
提出日時 2026-09-16 22:39:11
言語 D
(dmd 2.113.0)
コンパイル:
dmd -fPIE -m64 -w -wi -O -release -inline -I/opt/dmd/src/druntime/import/ -I/opt/dmd/src/phobos -L-L/opt/dmd/linux/lib64/ -fPIC _filename_
実行:
./Main
結果
AC  
実行時間 230 ms / 2,000 ms
+ 648µs
コード長 985 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,795 ms
コンパイル使用メモリ 170,644 KB
実行使用メモリ 204,416 KB
最終ジャッジ日時 2026-09-16 22:39:21
合計ジャッジ時間 8,827 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 18
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import std;

void main () {
    int N = readln.chomp.to!int;
    auto A = new int[](N);
    auto B = new int[](N);
    foreach (i; 0 .. N) {
        readln.read(A[i], B[i]);
    }

    auto dp = new long[][](N + 1, N + 1);
    foreach (i; 0 .. N + 1) {
        dp[i][] = -long.max;
    }

    foreach (i; 0 .. N + 1) {
        dp[0][] = 0;
    }

    foreach (i; 0 .. N) {
        foreach (j; 0 .. N + 1) {
            if (dp[i][j] == -long.max) {
                continue;
            }

            // 攻撃する
            if (0 <= j - 1) {
                dp[i + 1][j - 1] = max(dp[i + 1][j - 1], dp[i][j] + B[i]);
            }

            // 攻撃しない
            dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + 1L * A[i] * j);
        }
    }

    writeln(dp[N][0]);
}

void read (T...) (string S, ref T args) {
    import std.conv : to;
    import std.array : split;
    auto buf = S.split;
    foreach (i, ref arg; args) {
        arg = buf[i].to!(typeof(arg));
    }
}
0