トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ABC-067-B Snake Toy
■■■問題■■■
すぬけくんはN本の棒を持っています。 i番目の棒の長さはliです。
すぬけくんはK本の棒を選んでつなげて、ヘビのおもちゃを作りたいです。
ヘビのおもちゃの長さは選んだ棒たちの長さの総和で表されます。
ヘビのおもちゃの長さとしてありうる長さのうち、最大値を求めなさい。
■■■入力■■■
N K
l1 l2 l3 ・・・ lN
●1 <= K <= N <= 50
●1 <= li <= 50
●li は整数
■■■出力■■■
答えを出力せよ
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5 3");
WillReturn.Add("1 2 3 4 5");
//12
//長さ3,4,5の棒を選んでつなげると、
//長さ12のヘビのおもちゃを作ることが可能で、
//これがありうる長さのうち最大の値です。
}
else if (InputPattern == "Input2") {
WillReturn.Add("15 14");
WillReturn.Add("50 26 27 21 41 7 42 35 7 5 5 36 39 1 45");
//386
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
int K = wkArr[1];
int[] LArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
Console.WriteLine(LArr.OrderByDescending(X => X).Take(K).Sum());
}
}
解説
LINQで解いてます。