トップページに戻る
   次の競技プログラミングの問題へ
   前の競技プログラミングの問題へ
ARC-025-A ゴールドラッシュ
■■■問題■■■
stove君はとある平面世界の住人である。
ある日stove君は多くの金が取れる鉱山を砂漠とジャングルに発見した。
stove君は7日間かけて鉱山採掘に取り組むことにした。
砂漠とジャングルは遠い位置関係にあるので、それぞれの日にはどちらか一方の鉱山でしか採掘できない。
その日の天候、気分に応じて採掘量が鉱山ごとに変化してしまうので、
どちらの鉱山を選ぶべきかがその日毎に異なる場合がある。
それぞれの日においての採掘量が分かっているとき、
最適に鉱山を選んだ場合に得られる金の量がいくらかを求めるプログラムを作成せよ。
■■■入力■■■
D1 D2 ・・・ D7
J1 J2 ・・・ J7
●1行目には、砂漠の鉱山に関する情報を表す7個の整数が空白区切りで書かれている。
  このうち左からi番目の整数 Di(0 <= Di <= 2000) は、
  i日目に砂漠の鉱山で採掘を行った場合に得られる金の量がDiキログラムであることを表す。
●2行目にはジャングルの鉱山に関する情報を表す7個の整数が空白区切りで書かれている。
  このうち左からi番目の整数 Ji(0 <= Ji <= 2000) は、
  i日目にジャングルの鉱山で採掘を行った場合に得られる金の量がJiキログラムであることを表す。
■■■出力■■■
最適に鉱山を選んだ場合に得られる金の量を1行に出力せよ。出力の末尾にも改行を入れること。
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("4 2 0 5 6 2 5");
            WillReturn.Add("6 1 4 3 6 4 6");
            //33
            //以下のように行動すれば良い。
            //●1日目にはジャングルの鉱山を選び、6キログラムの金を得る。
            //●2日目には砂漠の鉱山を選び、2キログラムの金を得る。
            //●3日目にはジャングルの鉱山を選び、4キログラムの金を得る。
            //●4日目には砂漠の鉱山を選び、5キログラムの金を得る。
            //●5日目には砂漠の鉱山を選び、6キログラムの金を得る。
            //●6日目にはジャングルの鉱山を選び、4キログラムの金を得る。
            //●7日目にはジャングルの鉱山を選び、6キログラムの金を得る。
            //このように行動すると、
            //6+2+4+5+6+4+6 = 33 キログラムの金を得ることができる。
            //なお、5日目にジャングルの鉱山を選んでも
            //同じ量を達成することができる。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("1 2 3 4 5 6 7");
            WillReturn.Add("2 3 4 5 6 7 8");
            //35
            //ジャングル一択である
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("0 0 0 0 0 0 0");
            WillReturn.Add("0 0 0 0 0 0 0");
            //0
            //この例の場合、金を得ることができない。
            //金が出るという話はなんだったのだろうか。
        }
        else if (InputPattern == "Input4") {
            WillReturn.Add("8 3 0 2 5 25 252");
            WillReturn.Add("252 252 2 5 2 5 2");
            //793
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }
    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] DArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
        int[] JArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
        int Answer = 0;
        for (int I = 0; I <= DArr.GetUpperBound(0); I++) {
            Answer += Math.Max(DArr[I], JArr[I]);
        }
        Console.WriteLine(Answer);
    }
}
解説
順に大きいほうを計上してます。