結果

問題 No.2889 Rusk
ユーザー tottoripapertottoripaper
提出日時 2024-09-13 22:29:24
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 143 ms / 2,000 ms
コード長 1,133 bytes
コンパイル時間 2,306 ms
コンパイル使用メモリ 207,972 KB
実行使用メモリ 28,288 KB
最終ジャッジ日時 2024-09-13 22:29:40
合計ジャッジ時間 7,558 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 52
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using ll = std::int64_t;

int main(){
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    int N;
    std::cin >> N;

    std::vector<ll> A(N), B(N), C(N);
    for(int i=0;i<N;i++){
        std::cin >> A[i];
    }
    for(int i=0;i<N;i++){
        std::cin >> B[i];
    }
    for(int i=0;i<N;i++){
        std::cin >> C[i];
    }

    auto trans = [](int j, int k){
        return j % 3 <= k % 3 && j / 3 <= k / 3;
    };

    std::vector dp(N + 1, std::vector<ll>(9, 0));
    dp[0][0] = 0;
    for(int i=0;i<N;i++){
        for(int j=0;j<9;j++){
            for(int k=0;k<9;k++){
                if(!trans(j, k)){continue;}

                ll v = 0;
                if(k % 3 == 1 && k / 3 == 1){
                    v += C[i];
                }else if(k % 3 == 1 || k / 3 == 1){
                    v += B[i];
                }else{
                    v += A[i];
                }

                dp[i + 1][k] = std::max(dp[i + 1][k], dp[i][j] + v);
            }
        }
    }

    ll res = *std::max_element(std::begin(dp[N]), std::end(dp[N]));
    std::cout << res << std::endl;
}
0