n 位勇者现在正围坐在一个圆桌边上等着吃饭我们认为第 i2≤i≤n 位勇者和第 i−1 位勇者相邻另外第1位勇者和第n位勇者相邻。其中一些勇者爱吃带神奇香料的食物而其他勇者不爱吃。现在你已经准备了n份菜肴其中k份撒了神奇香料其余的都没撒。你将准备为每一位勇者提供一份菜肴放在他们面前而每位勇者可以吃到他面前的和与他相邻的勇者面前的菜肴。定义一位勇者的愉悦度:如果这位勇者爱吃神奇香料则其愉悦度为他能吃
思路:
由于勇者们围坐在一个圆桌旁,因此可以将第一个勇者的位置作为起点,枚举第一个吃到带香料的菜的位置,然后根据这个位置确定其他勇者的菜品分配方案,进而计算总愉悦度。
具体地,用数组 $a_i$ 表示第 $i$ 个勇者是否喜欢带香料的菜,$b_i$ 表示第 $i$ 个勇者所吃的菜,其中 $b_i=0$ 表示不吃带香料的菜,$b_i=1$ 表示吃带香料的菜,$b_i=2$ 表示吃不带香料的菜。则 $b_i$ 的值可以根据 $a_i$ 和 $b_{i-1}$ 推出:
$$b_i=\begin{cases}1&\text{if }a_i=1\ 2&\text{if }a_i=0\text{ and }b_{i-1}=1\ 0&\text{if }a_i=0\text{ and }b_{i-1}=0\end{cases}$$
注意,由于是围坐在一个圆桌旁,因此最后一个勇者的状态要根据第一个勇者的状态推出。
枚举第一个吃到带香料的菜的位置,计算出每种分配方案的总愉悦度,取最大值即可。
时间复杂度 $O(n^2)$。
代码:
原文地址: http://www.cveoy.top/t/topic/d4IO 著作权归作者所有。请勿转载和采集!