#include "bits/stdc++.h" // マクロ群 #define REP(i,n) for(int i=0;i eated; int dontEatPosi = -1; REP2(i, 0, N + 1) { // 前回までの合計値と、今回での合計値を比べ、大きい方をキープする dp[2] = max(dp[1], (dp[0] + V[i])); // 前回と変化がない = 食べなかった if (dp[2] == dp[1]) { // 1つ前の位置から開始して、前回食べれなかった位置まで一個飛ばしで遡る for (int j = i - 1; j > dontEatPosi; j -= 2) { eated.push_back(j + 1); // 位置を記憶する } dontEatPosi = i; } // 次ループのための処理 dp[0] = dp[1]; dp[1] = dp[2]; } // 回答1 PFL_N(dp[2]); // 回答2 // 並べ替え sort(eated.begin(), eated.end()); auto it = eated.begin(); while (it != eated.end() - 1) PFS_N(*it++); // ラスト手前で寸止め PFL_N(*it); } int main() { Slove(); return 0; }