結果
問題 |
No.258 回転寿司(2)
|
ユーザー |
![]() |
提出日時 | 2017-07-04 19:00:02 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 2,000 ms |
コード長 | 1,345 bytes |
コンパイル時間 | 1,939 ms |
コンパイル使用メモリ | 175,660 KB |
実行使用メモリ | 9,216 KB |
最終ジャッジ日時 | 2024-11-06 19:12:13 |
合計ジャッジ時間 | 5,958 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 67 |
ソースコード
// 基本テンプレート (縮小版) #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++) #define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++) #define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--) #define int long long template<typename T> void chmax(T &a, T b) {a = max(a, b);} template<typename T> void chmin(T &a, T b) {a = min(a, b);} template<typename T> void chadd(T &a, T b) {a = a + b;} typedef pair<int, int> pii; typedef long long ll; constexpr ll INF = 1001001001001001LL; constexpr ll MOD = 1000000007LL; int N, v[1010]; int dp[1010][2]; vector<int> vec[1010][2]; signed main() { cin >> N; rep(i,0,N) cin >> v[i]; rep(i,0,N) { dp[i+1][0] = max(dp[i][0], dp[i][1]); if(dp[i][0] >= dp[i][1]) { vec[i+1][0] = vec[i][0]; } else { vec[i+1][0] = vec[i][1]; } dp[i+1][1] = dp[i][0] + v[i]; vec[i+1][1] = vec[i][0]; vec[i+1][1].push_back(i+1); } int ans; vector<int> ret; if(dp[N][0] < dp[N][1]) { ans = dp[N][1]; ret = vec[N][1]; } else { ans = dp[N][0]; ret = vec[N][0]; } sort(ret.begin(), ret.end()); cout << ans << endl; rep(i,0,ret.size()) cout << (i==0 ? "" : " ") << ret[i]; cout << endl; return 0; }