AtCoderのARC
次のARCの問題へ
前のARCの問題へ
ARC006-C 積み重ね
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5");
WillReturn.Add("4");
WillReturn.Add("3");
WillReturn.Add("1");
WillReturn.Add("2");
WillReturn.Add("1");
//2
}
else if (InputPattern == "Input2") {
WillReturn.Add("7");
WillReturn.Add("93");
WillReturn.Add("249");
WillReturn.Add("150");
WillReturn.Add("958");
WillReturn.Add("442");
WillReturn.Add("391");
WillReturn.Add("25");
//3
}
else if (InputPattern == "Input3") {
WillReturn.Add("4");
WillReturn.Add("100");
WillReturn.Add("100");
WillReturn.Add("100");
WillReturn.Add("100");
//1
}
else if (InputPattern == "Input4") {
WillReturn.Add("6");
WillReturn.Add("5");
WillReturn.Add("10");
WillReturn.Add("15");
WillReturn.Add("20");
WillReturn.Add("25");
WillReturn.Add("30");
//6
}
else if (InputPattern == "Input5") {
WillReturn.Add("15");
WillReturn.Add("3");
WillReturn.Add("1");
WillReturn.Add("4");
WillReturn.Add("1");
WillReturn.Add("5");
WillReturn.Add("9");
WillReturn.Add("2");
WillReturn.Add("6");
WillReturn.Add("5");
WillReturn.Add("3");
WillReturn.Add("5");
WillReturn.Add("8");
WillReturn.Add("9");
WillReturn.Add("7");
WillReturn.Add("9");
//6
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] WArr = InputList.Skip(1).Select(pX => int.Parse(pX)).ToArray();
var WList = new List<int>();
foreach (int EachW in WArr) {
if (WList.Count == 0) {
WList.Add(EachW);
continue;
}
bool AddFlag = false;
WList = WList.OrderBy(pX => pX).ToList();
for (int I = 0; I <= WList.Count - 1; I++) {
if (EachW <= WList[I]) {
WList[I] = EachW;
AddFlag = true;
break;
}
}
if (AddFlag == false) {
WList.Add(EachW);
}
}
Console.WriteLine(WList.Count);
}
}
解説
93 249 150 958 442 391 25
で考察すると
既存の山に積める場合は、
詰める中で最小の山に積むのが、最適と分かります。