結果
問題 | No.258 回転寿司(2) |
ユーザー |
![]() |
提出日時 | 2016-05-09 21:00:53 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 53 ms / 2,000 ms |
コード長 | 2,632 bytes |
コンパイル時間 | 2,531 ms |
コンパイル使用メモリ | 109,184 KB |
実行使用メモリ | 25,344 KB |
最終ジャッジ日時 | 2024-11-06 19:02:19 |
合計ジャッジ時間 | 8,774 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 67 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;using System.Collections.Generic;using System.Text;using System.Linq;class Program{public void Proc(){Reader.IsDebug = false;int itemCount = int.Parse(Reader.ReadLine());this.sushi = Reader.GetInt();List<int> ans = this.GetAns(0);ans.Sort();Console.WriteLine(ans.Sum(a=>this.sushi[a]));ans = new List<int>(ans.Select(a=>a+1));Console.WriteLine(string.Join(" ", ans));}private int[] sushi ;Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();public List<int> GetAns(int idx) {if(dic.ContainsKey(idx)) {return dic[idx];}List<int> ans = new List<int>();int max = 0;if(idx >= this.sushi.Length) {} else if(idx == this.sushi.Length - 1) {ans.Add(idx);} else{List<int> tmp = new List<int>(this.GetAns(idx + 2));tmp.Add(idx);int total = tmp.Sum(a=>this.sushi[a]);if(total > max) {max = total;ans = tmp;}tmp = new List<int>(this.GetAns(idx + 1));total = tmp.Sum(a=>this.sushi[a]);if(total > max) {max = total;ans = tmp;}}this.dic.Add(idx, ans);return ans;}public class Reader{public static bool IsDebug = true;private static String PlainInput = @"71 2 9 10 1 1 4ı";private static System.IO.StringReader Sr = null;public static string ReadLine(){if (IsDebug){if (Sr == null){Sr = new System.IO.StringReader(PlainInput.Trim());}return Sr.ReadLine();}else{return Console.ReadLine();}}public static int[] GetInt(char delimiter = ' ', bool trim = false){string inptStr = ReadLine();if (trim){inptStr = inptStr.Trim();}string[] inpt = inptStr.Split(delimiter);int[] ret = new int[inpt.Length];for (int i = 0; i < inpt.Length; i++){ret[i] = int.Parse(inpt[i]);}return ret;}}static void Main(){Program prg = new Program();prg.Proc();}}