YC327A [ 20240821 CQYC NOIP 模拟赛 T1 ] 最值(minmax)

题意

对于一个序列 \({b_n}\),规定:

\[f_min(b) = \prod_{i = 1} ^ n (min_{j = 1} ^ i b_j) \]

\[f_max(b) = \prod_{i = 1} ^ n (max_{j = 1} ^ i b_j) \]

给定一个序列 \(a\),求 \(a\) 所有的排列 \(p\)\(f_min(p)\)\(f_max(p)\) 之和。

\(n \le 5000\)

Sol

不难想到一个简单的 \(\texttt{dp}\),设 \(f_{i, j}\) 表示放了 \(i\) 个数,当前最大值的排名为 \(j\) 的权值贡献和,因此每加入一个数的贡献就是 \(f_{i, j} \times a_i\)

将每一次最小值的贡献用转移表示出来,注意到事实上若同一个数转移了多次,那么当前放的数不会是之前的 \(a_i\),因此需要乘上一个排列,表示选出前面的数的方案。

第一次新加入则不需要乘上这个贡献,前缀和优化转移即可。

posted @ 2024-08-22 09:33  cxqghzj  阅读(3)  评论(0编辑  收藏  举报