P2224 [HNOI2001] 产品加工
P2224 [HNOI2001] 产品加工
题目描述
某加工厂有 A、B 两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任务又会不同。
某一天,加工厂接到 \(n\) 个产品加工的任务,每个任务的工作量不尽一样。
你的任务就是:已知每个任务在 A 机器上加工所需的时间 \(t_1\),B 机器上加工所需的时间 \(t_2\) 及由两台机器共同加工所需的时间 \(t_3\),请你合理安排任务的调度顺序,使完成所有 \(n\) 个任务的总时间最少。
输入格式
第一行为一个整数 \(n\)。
接下来 \(n\) 行,每行三个非负整数 \(t_1,t_2,t_3\),分别表示第 \(i\) 个任务在 A 机器上加工、B 机器上加工、两台机器共同加工所需要的时间。如果所给的时间 \(t_1\) 或 \(t_2\) 为 \(0\) 表示任务不能在该台机器上加工,如果 \(t_3\) 为 \(0\) 表示任务不能同时由两台机器加工。
输出格式
仅一行一个整数,表示完成所有 \(n\) 个任务的最少总时间。
输入输出样例 #1
输入 #1
5
2 1 0
0 5 0
2 4 1
0 0 3
2 1 1
输出 #1
9
说明/提示
对于所有数据,有 \(1\le n\le 6\times 10^3\), \(0\le t_1,t_2,t_3\le 5\)。
思路
这道题我自己想了接近一个小时没有想出来状态定义。
看了题解之后这个状态定义就忘不了了。
因为这道题和两个机器的时间都有关系,但是这里无法支持把两个机器的时间都存进去,况且存进去之后,\(f\) 数组里面存什么值呢?
因此设 \(f_{i,j}\) 表示完成前 \(i\) 个任务,第一台机器花了 \(j\) 时间时,第二台机器花的时间的最小值。
那么状态转移方程式就可以出来了:
然后这道题卡空间,滚动一下就可以了,滚动的时候记得初始化!

浙公网安备 33010602011771号