NOIP2024模拟赛24

A. 飞翔

考虑既然每条边需要被经过后才会对后面的边权进行改变,那么直接考虑边 \((u,v)\)\(u\) 经过了这条边后会使 \(v\) 到达的点的边权都一样。那么把 \(v\) 到其他点的无边权距离求出来,\(u\) 与这些点的距离为 \((u,v) \times dis(v,i)\)

再随便跑个最短路就好了。不过出题人是认真的吗?\(m\) 比真正的数据范围小了这么多倍,暴力都直接艹过去了。

B. 子序列们

区间 \(DP\)

因为要使统计不重不漏,所以我们钦定如果元素相同那么一定先删最靠左的那个。那么因为这道题的钦定内容,如果 \(a_i = a_j\) 且删除的顺序 \(t_i > t_j\) 那么一定存在 \(k \in (i,j)\) 满足 \(t_i > t_k > t_j\)

我们定义 \(dp_{l,r}\) 表示 \(r+1\) 是最先删的,那么枚举 \(k \in [l,r]\),令 \(k\)\([l,r]\) 中最先被删的,因为任何一个 \(i\in [l,r]\) 都有 \(t_i > t_{r+1}\),而 \(dp_{k+1,r}\) 已经满足了钦定的条件了,所以需要 \(a_k \ne a_{r+1}\)

由此拿出 \(dp\) 式:\(dp_{l,r}=\sum_{k=l}^rdp_{l,k-1}\times dp_{k+1,r}\)

因为钦定的原因,所以只有 \(a_i\ne a_{i+1}\) 时,\(dp_{i,i}=1\)

C. 钙绿

简单的 \(dp\)

通过循环节我们可以求出最后的十进制数的每一位的贡献,而这个贡献的范围是 \([0,p)\)。用 \(ct_i\) 表示贡献为 \(i\) 的位数为 \(ct_i\)

而定义 \(dp\) 状态:\(dp_{i,j,k}\) 表示枚举到第 \(i\) 位,前 \(i-1\) 位用掉的和为 \(j\),贡献为 \(k\) 的方案数。

容易得到转移 \(dp_{i,j,k}\times f_{i,l} \to dp_{i+1,j+l,(k+i\times l)\% p}\)。此处的 \(f_{i,l}\) 表示

posted @ 2024-11-09 17:06  LarrixAntofanin  阅读(21)  评论(0)    收藏  举报