動的計画法の学習(from:Paiza)
いろいろとPaizaの課題を解いている中で、動的計画法が便利だということなので、その学習と実装を記載する。
基本的に以下の記事に記載されている内容を読んで実装しただけ。
https://paiza.jp/poh/kirishima
以下、実装。記事に記載されているコードと若干異なる部分があるが、これでも満点を取ることができた。
M = gets.to_i # プロジェクトに必要な人員数
N = gets.to_i # 下請けの会社の数
dp = Hash.new
dp[0] = 0
N.times{|i|
line = gets.split(" ")
num = line[0].to_i
price = line[1].to_i
temp_dp = dp.clone
dp.each_with_index{|(k, v), j|
idx = k + num # 対象のキーを求める
min = v + price
if dp.has_key?(idx)
# 既に値が入っていた場合のみ、その値と比較して小さい方を格納
min = [min, dp[idx]].min
end
temp_dp[idx] = min
}
dp = temp_dp
}
dp.select!{|k, v| k >= M}
puts dp.values.min
アルゴリズムになんとなく苦手意識を持っていたが、解説の記事の内容が分かりやすく、実装も思っていたよりもずっと簡単に済んだ。
地味に新しい武器を手に入れた感覚。
いつかは、A*等の高度なアルゴリズムもマスターしたいが、基本的にアルゴリズムを業務で使うことはないだろうし、結構先のことになるだろう。。。
Author And Source
この問題について(動的計画法の学習(from:Paiza)), 我々は、より多くの情報をここで見つけました https://qiita.com/F_H_23/items/25d13c7b16d23e229efa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .