$n<=10^6$个人洗衣服,第$i$个人的到达时间为$(0\leq t\leq 10^9)$,
有一台洗衣机,同时只能洗一件衣服,花费的时间为$x$,
每个人都可以手洗衣服,多个人可以同时手洗衣服,花费的时间为$y$,
对于$x\in[1,y]$的每个$x$,输出能让$n$个人都能洗完衣服所需花费的最小时间
找规律,可以知道一定是前一段时间手洗,后一段机器洗。
$ans_x=\min\sum_{i}^n \max (t_i+y,\max \sum(t_{j}+(n-j+1)x))$
如果这样维护就成了$O(n^2\log n)$
单独看一个$ans_x$,这个函数是个凸函数。一个增,一个减。
$ans_y$是最优解是$i=y$时,随着$x$减小,最优$i$在减小,此时建议画函数图可以清楚知道为啥。
代码
1 |
|