import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] sushi = new int[n]; for(int i = 0; i < n && sc.hasNextInt(); i++){ sushi[i] = sc.nextInt(); } sc.close(); int[] memo = Main.calc(n, sushi); Arrays.sort(memo); System.out.println(memo[memo.length - 1]); } // データの格納領域を作成する public static int[] create(int n){ int[] memo = new int[(n + 1) / 2 + 1]; memo[0] = 0; for(int i = 1; i < memo.length; i++){ memo[i] = Integer.MIN_VALUE; } return memo; } // 最大の美味しさを計算する public static int[] calc(final int n, final int[] sushi){ Deque stack = new ArrayDeque<>(); int[] memo = create(n); // 1つ目の寿司を選んだ状態を処理スタックに追加 for(int i = 0; i < sushi.length; i++){ Node startNode = new Node(i, i, 1, sushi[i]); stack.push(startNode); } // 寿司1つの場合の最大美味しさは事前に計算する int[] tmp = sushi.clone(); Arrays.sort(tmp); memo[1] = tmp[tmp.length - 1]; while(stack.size() > 0){ Node current = stack.peek(); // 存在しない寿司は削除して次へ if(current.pos >= sushi.length){ stack.pop(); continue; } // 存在しない寿司を取る場合は削除して次へ final int pos = current.nextPos; if(pos >= sushi.length){ stack.pop(); continue; } // 最大の美味しさを更新 final int umami = current.totalUmami + sushi[pos]; final int dishes = current.dishes + 1; if(umami >= memo[dishes]){ memo[dishes] = umami; } // 次の寿司を選んだ状態を追加する stack.push(new Node(current.id, pos, dishes, umami)); // 今回とは別の寿司を選ぶため更新をかける current.nextPos++; } return memo; } } class Sushi{ int umami; int pos; public Sushi(int pos, int umami) { this.pos = pos; this.umami = umami; } } class Node extends Sushi{ @Deprecated int id; @Deprecated int dishes; int nextPos; int totalUmami; public Node(int id, int pos, int dishes, int totalUmami) { super(pos, -1); this.id = id; // 次にとることができる寿司は2つ以上離れている nextPos = pos + 2; this.dishes = dishes; this.totalUmami = totalUmami; } @Override public String toString() { return "{id=" + id + " dishes=" + dishes + " pos=" + pos + " nextpos=" + nextPos + " totalUmami=" + totalUmami + "}"; } }