結果

問題 No.258 回転寿司(2)
ユーザー xuzijian629
提出日時 2018-11-02 20:55:38
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 16 ms / 2,000 ms
コード長 849 bytes
コンパイル時間 1,868 ms
コンパイル使用メモリ 196,376 KB
最終ジャッジ日時 2025-01-06 15:27:01
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 67
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
using vi = vector<i64>;
using vvi = vector<vi>;

void printvec(vi& x, int size = 0) {
    cout << x.front();
    for (int i = 1; i < (size == 0 ? x.size() : size); i++) {
        cout << " " << x[i];
    }
    cout << endl;
}

int main() {
    int n;
    cin >> n;
    vi dp(n + 3);
    vi as(n);
    for (int i = 0; i < n; i++) {
        int v;
        cin >> v;
        as[i] = v;
        dp[i + 3] = max(dp[i] + v, dp[i + 1] + v);
    }

    i64 ans = (n == 1 ? dp.back() : max(dp.back(), dp[n + 1]));
    cout << ans << endl;
    i64 sum = ans;
    vi ss;
    for (int i = n + 2; i >= 3; i--) {
        if (dp[i] == sum) {
            ss.push_back(i - 2);
            sum -= as[i - 3];
        }
    }
    assert(sum == 0);
    reverse(ss.begin(), ss.end());
    printvec(ss);
}
0