戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2009年 秋期 午前(科目A)72


問題文

ある工場では表に示す3製品を製造している。実現可能な最大利益は何円か。ここで、各製品の月間需要量には上限があり、組立て工程に使える工場の時間は月間200時間までとする。
基本情報技術者 2009年 秋期 午前(科目A) 問72の問題画像

選択肢

2,625,000
3,000,000
3,150,000
3,300,000(正解)

製品別利益と組立て時間による最大利益の算出【午前2 解説】

要点まとめ

  • 結論:総作業時間時間=分の下で、利益/分が高い順に需要上限まで割り当てると最大利益は3,300,000円です。
  • 根拠:利益/分はX=300円、Y=250円、Z=200円で単位時間当たりの効率が異なるため、効率優先で配分します。
  • 差がつくポイント:時間単位を「時間→分」に必ず変換し、利益/分(密度)でソートして需要上限を順に消費すること。

正解の理由

正解: (3,300,000円)
手順と計算:
  1. 工場の使える時間は 時間= 分です。
  2. 各製品の利益/分を計算すると、X: 円/分、Y: 円/分、Z: 円/分。
  3. 利益/分が大きい順に、需要上限まで割り当てる(グリーディ=効率優先)。
    • X を最大 1,000個生産:時間 1,000×6=6,000 分、利益 1,000×1,800=1,800,000 円。
    • 残り時間 12,000−6,000=6,000 分を Y に充てられる個数は 6,000/10=600 個(上限 900 の範囲内)。利益 600×2,500=1,500,000 円。
    • 残り時間 0 分(Z に回す余地なし)。
  4. 合計利益 = 1,800,000 + 1,500,000 = 3,300,000 円 → 選択肢 エ。
理由の要点は「利益を単位時間で比較し、時間という唯一の制約を効率的に使い切る」ことです。

よくある誤解

  • 「利益が大きい製品を優先すれば良い」と考えてZ(単価3,000円)を先に使う誤り。単位時間当たりの利益を比較すべきです。
  • 時間の単位変換を忘れて「200時間=200分」と誤る計算ミス。必ず分に揃えて計算します。
  • 需要上限を考慮せず比率だけで割り当てると、現実の上限制約を破ります。
  • 小数切り捨て・切り上げの扱いを誤り、個数を不正確に算出するミス。

解法ステップ

  1. 利用可能時間を分に変換する:.
  2. 各製品の利益/分(利益 ÷ 所要時間)を求める。
  3. 利益/分の大きい順に、その製品を需要上限まで(または残時間が尽きるまで)割り当てる。
  4. 各製品で割り当てた個数×単価を足し、合計利益を求める。
  5. 単位・端数(個数は整数)・上限条件を再確認して最終答を出す。

選択肢別の誤答解説

  • ア: 2,625,000円
    • 誤りの例:利益の高い単価順(Z→Y→X)で割り当てると Z をまず500個(時間7,500分、利益1,500,000円)、残り4,500分でYを450個(利益1,125,000円)生産し合計2,625,000円となります。これは「利益/分」を見落とした典型的な誤りです。
  • イ: 3,000,000円
    • 誤りの例:Xを1,000個(1,800,000円)生産後、残時間を誤って4,800分と計算してYを480個(1,200,000円)生産したとすると合計3,000,000円になります。残時間の計算ミスによる誤答です。
  • ウ: 3,150,000円
    • 誤りの例:Xを1,000個(1,800,000円)生産後、残時間を誤って5,400分としYを540個(1,350,000円)生産して合計3,150,000円とするミス。時間の誤認や端数処理ミスが原因です。
  • エ: 3,300,000円(正解)
    • 正しい配分は X=1,000個(6,000分)、Y=600個(6,000分)、Z=0個。利益合計 3,300,000円。

補足コラム

この問題は「限られた資源(時間)を使って利益を最大化する」単一制約の最適化問題で、線形計画(LP)や連続ナップサック(分割可能な場合)と同種の考え方です。ここでは各製品の単位当たり所要時間と利益が比例的に定まっているため、利益密度(利益/時間)でソートする貪欲法が最適になります。整数解の扱い(個数は整数)でも、本問のように上限と時間がきれいに合うケースでは貪欲法で正解を得られます。
簡単な確認用Pythonコード例(貪欲割当):
products = [
    {"name":"X","profit":1800,"time":6,"limit":1000},
    {"name":"Y","profit":2500,"time":10,"limit":900},
    {"name":"Z","profit":3000,"time":15,"limit":500},
]
T = 200*60  # 分
# 利益密度でソート
products.sort(key=lambda p: p["profit"]/p["time"], reverse=True)
total_profit = 0
alloc = {}
for p in products:
    max_units = min(p["limit"], T // p["time"])
    alloc[p["name"]] = max_units
    total_profit += max_units * p["profit"]
    T -= max_units * p["time"]
print(alloc, total_profit)  # {'X': 1000, 'Y': 600, 'Z': 0} 3300000

FAQ

Q: 利益/分で比較する理由は何ですか?
A: 資源制約が「時間のみ」であるため、単位時間あたりに得られる利益(利益密度)が高いものを優先的に生産することが総利益最大化に直結するからです。
Q: 需要上限が無ければどうなりますか?
A: 需要上限が無ければ利益/分が最大の製品(本問ではX)だけを生産して時間を使い切るのが最適になります。
Q: この手法は常に最適ですか?
A: 単一のリニアな資源制約で「製品ごとの利益が時間に対して比例」する場合は貪欲法で最適です。複数の制約や非線形報酬がある場合は線形計画や整数計画で解く必要があります。

関連キーワード: 利益率、利益/時間、資源配分、貪欲法、線形計画法、ナップサック、組立て時間、需要上限、最適化、単位時間効率
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について