結果

問題 No.258 回転寿司(2)
ユーザー kk
提出日時 2021-03-14 03:28:59
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 3 ms / 2,000 ms
コード長 824 bytes
コンパイル時間 2,042 ms
コンパイル使用メモリ 197,968 KB
最終ジャッジ日時 2025-01-19 16:16:10
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 67
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int n;
  cin >> n;
  vector<int> v(n);
  for (int i = 0; i < n; i++)
    cin >> v[i];

  vector<vector<int> > dp(n+1, vector<int>(2));
  vector<vector<int> > pre(n+1, vector<int>(2));
  
  for (int i = 0; i < n; i++) {
    dp[i+1][0] = max(dp[i][0], dp[i][1]);
    if (dp[i+1][0] == dp[i][0])
      pre[i+1][0] = 0;
    else
      pre[i+1][0] = 1;

    dp[i+1][1] = dp[i][0] + v[i];
    pre[i+1][1] = 0;
  }
  
  int r = max(dp[n][0], dp[n][1]);
  cout << r << endl;

  int q = dp[n][1] > dp[n][0] ? 1 : 0;
  vector<int> w;
  for (int i = n; i > 0; i--) {
    if (q)
      w.push_back(i);
    q = pre[i][q];
  }

  reverse(w.begin(), w.end());
  for (int t: w)
    cout << t << " ";
  cout << endl;

  return 0;
}
0