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\) 时间时,第二台机器花的时间的最小值。

那么状态转移方程式就可以出来了:

\[f_{i,j}=\min \{f_{i-1,j}+t_{2,i}\ ,\ f_{i-1,j-t_{1,i}}\ ,\ f_{i-1,j-t_{3,i}}+t_{3,i}\} \]

然后这道题卡空间,滚动一下就可以了,滚动的时候记得初始化!

posted @ 2025-07-29 16:31  shencheng4014  阅读(9)  评论(0)    收藏  举报