トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

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で解いてます。