Loading

Ucup

比赛链接

A

矩乘优化 DP,卡常。

B

题意

给一个正整数序列 \(A\),对 \(k \in 0 \dotsb N\),求 \(\left\{1,2, \dotsb ,N \right\}\) 的子集 \(S\) 的数量使得 \(S\) 有一个子集 \(T\) 满足 \(|S|-|T|=k\)\(\sum\limits_{i \in T} A_i \ge M\)

分析

不是很好想的 DP。

答案初始为 \(2^n\),考虑扣掉不合法的方案数。首先 \(S\) 的大小至少为 \(k\)

\[ans=2^n-\sum\limits_{i=0}^{k-1}\begin{pmatrix} n \\ k \end{pmatrix} \]

考虑到小于比大于好求,将题意对称转化,计数 \(S\),其所有子集 \(T\) 满足 \(|S|-|T|=k\)\(\sum\limits_{i \in T} A_i < M\)

定义 \(f(i,j)\) 表示选了前 \(i\) 个的一部分,和为 \(j\) 的方案数,\(g(i,j)\) 表示选了前 \(i\) 个的一部分,必须选 \(i\),和为 \(j\) 的方案数,转移是显然的:

\[f(i,j)=f(i-1,j)+f(i-1,j-A_i) \]

\[g(i,j)=f(i-1,j-A_i) \]

定义 \(sum_i\) 表示前 \(i\) 个数中选和不超过 \(m\) 的方案数(必须选 \(i\)),则 \(sum_i=\sum\limits_{j} g(i,j)\)

扣除的第二部分可表示为 \(\sum\limits_{i=0}^{n-k} sum_i \times \begin{pmatrix} n-i \\ k \end{pmatrix}\),表示枚举 \(T\) 的范围(必须包含最后一位非常巧妙),在后面剩下的随便选 \(k\) 个组成 \(S\)

于是可得最终 \(ans\) 的表达式。

\[ans=2^n-\sum\limits_{i=0}^{k-1}\begin{pmatrix} n \\ k \end{pmatrix}-\sum\limits_{i=0}^{n-k} sum_i \times \begin{pmatrix} n-i \\ k \end{pmatrix} \]

时间复杂度 \(O(n \times m)\)

C

题意

甲乙轮流完成 \(n\) 项工作,甲做第 \(i\) 项工作的时间是 \(A_i+B_j\)(甲之前做了 \(j\) 项工作),乙做第 \(i\) 项工作的时间是 \(C_i+D_j\)(乙之前做了 \(j\) 项工作)。

求做完的最小时间。

分析

先假设全是甲做的,分开维护 \(A,B\) 的贡献 \(ans_1\)\(C,D\) 的贡献 \(ans_2\)。注意到将第 \(i\) 项工作从甲做变为乙做对 \(ans_1\) 产生 \(B_i-A_i\) 的贡献,而 \(ans_2\) 实际是 \(C,D\) 的一段前缀和,可以预处理。

所以可以把 \(B_i-A_i\) 插进堆里,每次取出最小值,过程中取 \(ans_1+ans_2\) 的最小值。

时间复杂度 \(O(n \log n)\)

H

神秘期望题。

I

题意

求满足 \(\exists i,A_{P_1}+ \dotsb + A_{P_i}=A_{P_{i+1}}+ \dotsb A_{P_N}\) 的排列 \(P\) 的个数。

分析

直接 DP,考虑往等式左右两边填数字。

定义 \(f(i,j,s)\) 表示考虑 \(A\) 的前 \(i\) 位,此时等式左边有 \(j\) 个,左边和为 \(s\) 的方案数,则有转移:

\[f(i,j,s)=f(i-1,j-1,s-A_i)+f(i-1,j,s) \]

分别表示放在左边或右边,然后滚动数组或倒序转移优化掉第一维就行了。

时间复杂度 \(O(n^4)\)

K

题意

有一个初始全 \(0\) 的序列 \(H\),每次可以选择一段连续的登高序列整体加一。要求序列的差分各项有最小值 \(D\)

问最小进行整体加一的步骤数。

分析

考虑 DP。

定义 \(f(i,j)\) 表示前 \(i\) 个位置,当前高度为 \(j\) 的最小花费,枚举某一位是上升还是下降,在下降的时候统计贡献,则有转移:

\[f(i,j+D_i) \longleftarrow f(i,j) \]

\[f(i,j-D_i) \longleftarrow f(i,j)+D_i \]

L

最先开的一题,居然想到菊花图就不会了,耻辱柱。

题意

给一个不降序列 \(X\),定义图的权值为 \(\sum^n_{i=1}\sum^n_{j=i+1} X_{dis(i,j)}\),构造一个 \(n\)\(m\) 边的无向图使得图的权值最小。

分析

图的权值和点的编号无关。可以先来一张菊花图,这样保证了最大用到 \(X_2\)。然后就有多少边连多少边,任意一对距离为 \(2\) 的点都会在连边后变为距离为 \(1\)。随便怎么连。

时间复杂度 \(O(m)\)

M

题意

给长度为 \(n\)\(A\),长度为 \(m\)\(B\)。从 \(A\) 中选 \(m\) 个组成 \(C\)\(B\) 匹配,最小化代价 \(\sum\limits_{i=1}^{m} |B_i-C_i|\)

分析

定义 \(f(i,j)\) 表示在 \(A\) 的前 \(i\) 个中,\(B\) 的前 \(j\) 个中选一部分的最小花费.

\[f(i,j)=\min \begin{cases} f(i-1,j) \\ f(i-1,j-1)+|A_i-B_i| \end{cases} \]

答案是 \(f(n,m)\)

posted @ 2024-10-06 20:27  tai_chi  阅读(16)  评论(0编辑  收藏  举报