「この問題蟻本でみたことある!」って感じだった
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?
- 作者: 秋葉拓哉,岩田陽一,北川宜稔
- 出版社/メーカー: マイナビ
- 発売日: 2012/01/28
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 473回
- この商品を含むブログ (32件) を見る
概要
出発日時と到着日時があるチケットがいくつか与えられる。
できるだけ多くのチケットを使用するためにはどのチケットを使えばいいか
解法
いわゆる区間スケジューリング問題なので、到着日時が早い順にチケットを使っていけばいい
ちなみにチケットの価値に差がある場合には動的計画法を使えばよいはず
使ったソースコード
import sys ticket = [] for line in sys.stdin: country, date = line.strip().split(' ') start_str, end_str = date.split('-') temp_start = start_str.split('/') start = int(temp_start[0])*100 + int(temp_start[1]) temp_end = end_str.split('/') end = int(temp_end[0])*100 + int(temp_end[1]) ticket.append((end, start, country)) ticket.sort() last = 0 result = [] for end, start, country in ticket: if start > last: last = end result.append(country) result.sort() print len(result), ' '.join(result)