問題一覧 > 通常問題

No.3634 Made to order

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 1024 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 11
作問者 : 👑 ssmbc2929_bartok / テスター : p-adic
ProblemId : 13435 / yukicoder contest 510 数学まみれコンテスト (順位表) / 自分の提出
問題文最終更新日: 2026-08-15 15:27:18
yukicoder contest 510 数学まみれコンテストの他の問題:

問題文

ばるとーく工務店では,オーダーメイドの机を製造している.

ある日,工務店にこのような依頼が入った.

$N$ 台の机を $D$ 日以内に納品してほしい.

親方曰く,机を $1$ 台製造するには,工程 $1$ → 工程 $2$ → 工程 $3$ をこの順に行う必要があるそうだ.
机 $i$ の製造には,工程 $1$,工程 $2$,工程 $3$ にそれぞれ $A_i, B_i, C_i$ 日を要する.
この工務店には,各工程を行うための専用の機械が $1$ 台あり,その機械は同時に $1$ 台の仕掛品(=製造途中の机)しか処理できない.
仕掛品たちは,製造することが決定次第ラインに乗せられるので,ある工程が完了した仕掛品は,次の工程の機械が空き次第すぐに作業を受ける.
そのため,各机をどのような順序で製造してもよいが,全工程が終わるまで作業を中断することはできない.
また,工程間で投入する順を入れ替えることはできない.例えば,工程 $1$ を先に開始させた仕掛品は工程 $2$ も先に開始させなければならない.

なるべく最短日時で納品できるように製造順序を最適に選んだとき,すべての机を作業開始から $D$ 日以内に完成させることができるか判定せよ.
ただし,納品はすべての商品が完成するまでできず,かつ,すべての商品が完成した日に即時行われるものとする.

制約

  • $1 \leq N \leq 13$
  • $1 \leq D \leq 5 \times 10^3$
  • $1 \leq A_i, B_i, C_i \leq 100$($1 \leq i \leq N$)
  • 入力値はすべて整数

入力

$N\ D$    
$A_1\ B_1\ C_1$    
$A_2\ B_2\ C_2$  
$\vdots$  
$A_N\ B_N\ C_N$  

出力

条件を満たす製造順序が存在するなら Yes,存在しないなら No と $1$ 行で出力せよ. 最後に改行すること.

部分点

この問題にはサブタスクによる部分点が設定されています。

サブタスク名配点制約
サブタスク $1$20%(60点)$(A, B, C)$ について,$min(A_i) ≥ max(B_i)$ または $min(C_i) ≥ max(B_i)$ を満たす,$N ≤ 13$ までの入力
サブタスク $2$10%(30点)サブタスク $1$ の条件を満たすとは限らない,$N ≤ 10$ までの入力
サブタスク $3$70%(210点)サブタスク $1$ の条件を満たすとは限らない,$N ≤ 13$ までの入力
※ただし,各サブタスク番号に対応したサンプルを AC しないと $0$ 点とする.
つまり,サブタスク $1$ についてはサンプル $1$ を,サブタスク $2$ についてはサンプル $2$ を,サブタスク $3$ についてはサンプル $3$ を AC しなければならない.

また,サブタスク $2$ のみを AC できるようなコードを書く場合,サブタスク $1$ のコードテストでTLEとなる可能性がある.
そのため,このようなコードを提出する場合は,サブタスク $2$ の制約を満たさない場合に即座に実行終了するようにすることをおすすめする.

サンプル

サンプル1
入力
3 18
5 4 2
6 2 1
4 4 4
出力
Yes

例えば,机 $3$ → 机 $1$ → 机 $2$ の順で作ることで,納期 $D$ である $18$ 日に間に合わせることが可能です. このとき,制作過程を図で表すとこうなります.

サンプル2
入力
6 422
75 100 15
74 75 20
80 57 53
48 42 1
5 68 1
78 55 94
出力
No

サンプル3
入力
11 724
73 98 9
33 16 64
98 58 61
84 49 27
13 63 4
50 56 78
98 99 1
90 58 35
93 30 76
14 41 4
3 4 84
出力
No

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。