預燒 (burn-in) 是半導體測試流程的一個步驟,將待測品放進預燒爐 (burn-in oven) 中,在高溫高壓的環境下檢測產品功能。
* 容量限制:預燒爐每次操作可以檢測一個或多個待測品,但一次操作的待測品的批量總和不可超過預燒爐容量上限。
* 預燒時間:預燒爐每次操作的時間為該批次中待測品的最長預燒時間,一旦開始就不能中間加入或取出待測品,即同一次操作的待測品會同時進入預燒爐,也同時離開預燒爐。
給定一台預燒爐,其最大容量上限為 $Q$。有 $N$ 個待測品,已知各待測品的優先順序 ($p_i$)、批量 ($s_i$) 和預燒時間 ($t_i$)。首先將所有待測品依優先順序由小到大排序,在此順序的前提下,將待測品分批,再將各批送入預燒爐檢測。請撰寫一個程式求取最佳分批方法,以在最短時間內檢測完所有待測品。
舉例來說,若預燒爐的容量為 $10$,且三個待測品的資訊如下:
可能的分批方式有:
* A | B | C:即每次操作只檢測一個待測品,總花費時間為 $1+5+6=12$。
* AB | C:第一批次檢測 A 和 B,第二批次檢測 C,總花費時間為 $\max{1,5}+6=11$。
* A | BC:第一批次檢測 A,第二批次檢測 B 和 C,總花費時間為 $1+\max{5,6}=7$。
* ABC:全部放在同一批,但因批量總和 $4+5+3=12$ 超過容量上限 $10$,此分批不合法。
因此在所有合法的分批方式中,檢測完所有待測品的最短時間是 $7$ 單位時間。
輸入第一列有兩個正整數 $Q (1 \le Q \le 10000)$ 和 $N (1 \le N \le 16)$,分別代表預燒爐的容量上限以及待測品的數量。接下去有 $N$ 列,每列有三個正整數 $p_i (1 \le p_i \le 1000)$、$s_i (1 \le s_i \le Q)$ 和 $t_i (1 \le t_i \le 1000)$,代表一個待測品的優先順序、批量和預燒時間。輸入保證所有 $p_i$ 值均相異。
本題有三子題組,每組有多筆測試資料,測試資料全對才能獲得該組分數。
* 第一子題組 [31分]:$N \le Q$,所有 $s_i = 1$。
* 第二子題組 [49分]:所有 $t_i = 1$。
* 第三子題組 [20分]:無特殊限制。
請輸出一個整數,代表檢測完所有待測品的最短時間。
10 3 1 4 1 2 5 5 3 3 6
7
10 3 3 1 3 2 5 5 1 3 4
5
3 3 2 2 2 3 2 7 1 2 4
13
5 3 1 2 7 3 2 7 4 2 2
14
2024 北市賽
| No. | Testdata Range | Constraints | Score |
|---|---|---|---|
| 1 | 0~7 | $N \leq Q \quad \forall s_i = 1$ | 31 |
| 2 | 8~17 | $\forall t_i = 1$ | 49 |
| 3 | 18~29 | 20 |