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)\)。
标签:end,题意,limits,sum,Ucup,pmatrix,ans From: https://www.cnblogs.com/tai-chi/p/18449358