题面
给定长度为 \(N\) 的序列 \(a\)。
一个序列有很多个子序列,每个子序列在序列中出现了若干次。
小马想请你输出序列 \(a\) 每个非空子序列出现次数的立方值的和,答案对 \(998244353\) 取模。
数据范围:\(n,a_i\le 250\) 。
题解
一个很高级的trick,"出现次数的立方值" 等价于 "我们选三个序列,他们恰好相同的方案数" 。
这样就可以设 \(f_{i,j,k}\) 表示现在选了三个一样的序列,第一个序列最后一位为 \(a_i\) , 第二个为 \(a_j\) ,第三个为 \(a_k\)
的方案数。
转移时只需要满足 \(a_i=a_j=a_k\) ,利用前缀和优化,可以实现 \(O(n^3)\) 的复杂度。
启发
- 就是这个trick,之前确实是没有什么印象。