AOJ本の読書メモ
AOJ
次のAOJの問題へ
前のAOJの問題へ
ALDS1_5_A: Exhaustive Search
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
// Q015 全探索 https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_5_A&lang=jp
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5");
WillReturn.Add("1 5 7 10 21");
WillReturn.Add("4");
WillReturn.Add("2 4 17 8");
//no
//no
//yes
//yes
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] AArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
int[] MArr = InputList[3].Split(' ').Select(X => int.Parse(X)).ToArray();
//作れる数のHashSet
var MakeNumSet = new HashSet<int>();
MakeNumSet.Add(0);
for (int I = 0; I <= AArr.GetUpperBound(0); I++) {
foreach (int EachInt in MakeNumSet.ToArray()) {
MakeNumSet.Add(EachInt + AArr[I]);
}
}
foreach (int EachInt in MArr) {
if (MakeNumSet.Contains(EachInt)) {
Console.WriteLine("yes");
}
else {
Console.WriteLine("no");
}
}
}
}
解説
動的計画法で
作れる数のHashSetを更新してます。