using System; using System.Linq; namespace Clover { class Program { static void Main(string[] args) { //n入力 int n = int.Parse(Console.ReadLine()); //Linqで入力文字列nを分割し、配列vに格納する int[] v = Console.ReadLine().Split().Select(x => int.Parse(x)).ToArray(); //タプルの作成(int vを加算した値, string 答えの候補) var maxCanEat = (0, ""); //次の寿司を食べられる状態 var maxCanNotEat = (0, ""); //次の寿司を食べられない状態 for (int i = 0; i < n; i++) { var workCanNotEat = (maxCanNotEat.Item1, maxCanNotEat.Item2); //データの退避 //寿司を食べる処理(食べられない状態の最大値を更新できないなら処理しない) if (maxCanEat.Item1 + v[i] > maxCanNotEat.Item1) { //寿司を食べたので、食べられない状態に値を代入 maxCanNotEat = (maxCanEat.Item1 + v[i], maxCanEat.Item2 + (i + 1).ToString() + " "); } //寿司を食べない処理(食べられる状態の最大値を更新できないなら処理しない) if (maxCanEat.Item1 < maxCanNotEat.Item1) { //食べられない状態から食べられる状態に値を代入 maxCanEat = workCanNotEat; } } //出力 Console.WriteLine("{0}",Math.Max(maxCanEat.Item1,maxCanNotEat.Item1)); Console.WriteLine("{0}".Trim(),maxCanEat.Item1 > maxCanNotEat.Item1 ? maxCanEat.Item2 : maxCanNotEat.Item2); } } }