Cunning Gena 题解

\(\texttt{Problem Link}\)

简要题意

\(n\) 个人,有 \(m\) 道题目,可以花费 \(b\) 元买一台显示器。现在可以让一些人给你打工,第 \(i\) 个人打工要 \(x_i\) 的工资还有 \(k_i\) 台显示器(第 \(i\) 个人用的显示器,其他人也可以用),让他打工能完成 \(s_i\) 这个题目集合,问完成所有题目最少花多少钱。

思路

\(x_i\) 表示第 \(i\) 个人的花费,\(s_i\) 表示第 \(i\) 个人做题集合,\(k_i\) 表示第 \(i\) 个人需要的显示器。

\(m \le 20\) 且不是计数,考虑 dp,发现确实可以做。

可以设 \(f_i\) 表示做题集合为 \(i\) 时最小花费。

易得状态转移:

\[f_{i\cup s_i} = \min\{f_j +x _i + t \times b\} \]

\(t\) 表示需要新买的显示器。特别的,不需要购买时 \(t = 0\)

但是直接这样做显然不对,因为对于 \(x_i + k _ i \times b = x_j +k_j \times b\) 时,可能会选择 \(k_i\) 更小的那个人导致之后需要的显示器费用增加,那么就要再将 \(k\) 从大到小排序,因为这样能让后面花费在显示器上的钱尽量小。

\(\texttt{Code}\)

posted @ 2024-04-11 21:16  Z_drj  阅读(28)  评论(1编辑  收藏  举报