結果
問題 | No.258 回転寿司(2) |
ユーザー | masa |
提出日時 | 2015-07-31 23:53:29 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,023 bytes |
コンパイル時間 | 791 ms |
コンパイル使用メモリ | 72,904 KB |
実行使用メモリ | 5,504 KB |
最終ジャッジ日時 | 2024-11-06 18:48:27 |
合計ジャッジ時間 | 3,946 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 67 |
ソースコード
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <utility> #include <string> using namespace std; int main() { int n; cin >> n; vector<int> v(n, 0); for (int i = 0; i < n; i++) { cin >> v[i]; } vector< vector< pair<int , string> > > dp(2, vector< pair<int , string> >(n)); dp[0][0] = make_pair(0, "0"); dp[1][0] = make_pair(v[0], "1"); int which; for (int i = 1; i < n; i++) { which = dp[0][i - 1].first >= dp[1][i - 1].first ? 0 : 1; dp[0][i] = make_pair(dp[which][i - 1].first, dp[which][i - 1].second + "0"); dp[1][i] = make_pair(dp[0][i - 1].first + v[i], dp[0][i - 1].second + "1"); } which = dp[0][n - 1].first >= dp[1][n - 1].first ? 0 : 1; string str = dp[which][n - 1].second; vector<int> ans; for (int i = 0; i < n; i++) { if (str[i] == '1') { ans.push_back(i); } } cout << dp[which][n - 1].first << endl; for (int i = 0; i < ans.size(); i++) { if (i != 0) { cout << " "; } cout << ans[i] + 1; } cout << endl; return 0; }