Rankこの広告は、90日以上更新していないブログに表示しています。N)が設定されている。A個以上、B以下の品物を取ることが出来る時、選択した品物の価値の最大の平均値と、その最大の平均値となるように品物を選択する通り数を出力する問題。解法まずは、全列挙できるか考え見る。品物を選択する方法を全列挙し、平均値を計算するという方法を考えてみる。B)個選択する場合の数の総和となる。combination)と表す事ができる。nCkとなり、最大で計算量はO(2N)なる。50の時に間に合わない。よって別の解法を考える。ソート済みの配列からA個取る解法この問題のポイントは平均値を出すということだ。価値の配列を昇順のソートすると、先頭から後方にかけて値は小さくなる。この時、先頭からA個取った場合が平均値が最大となる。これは平均の計算方法が分母に選択した要素数を当てるからである。次に、平均値が最大となるような品物のとり方の場合の数を考えてみる。具体的に、以下のような場合を考える。これらの値で平均値を計算したものが最大の平均値となる。A番目である10という数字はA番目以外にも存在する。平均値を計算するので、A番目以外の10を選択しても最大の平均値となる。今回はA番目と同じ数はvaluesの中に合計で3つ存在する。先頭からA番目までの範囲で10は1つ存在するので、平均値が最大となるには選択する品物の中に10は1つ含める必要がある。10の合計数は3つなので、平均値が最大となる選びからは、3C1通り存在することが分る。1}この例の場合では、先頭の数字とA番目の数字が一致している。選択する全ての数字が同じ数字の場合を考える。これは、平均値の性質で全て同じ数字であれば、選択する数を増やしても平均値は変わらないからだ。パスカルの三角形によって組合せを求めるnCkなどのコンビネーションはパスカルの三角形によって求める事ができる。パスカルの三角形は動的計画法を使うことで計算量O(N2)で作る事ができる。後者の解法の計算量を考える。O(N2)よって全体の計算量はO(N2)となる。Nの最大は50なので間に合う。僕の環境では以下の値となった。N個の整数を持つ配列が与えられる。(1)はてなブログをはじめよう!atiek1121さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。