[AGC041D] Problem Scores

Statement


statement

Solution


方法一:
整理一下题目的条件,\(\forall i\in[1,n)1\le A_i\le A_{i+1}\le n\)。并且满足前一半的和大于后一半的和。由于\(n\)的奇偶性不同做法略有不同,因此对\(n\)进行奇偶性讨论。
\(n=2k,k\in Z_+\)
此时\(A_{k+2}\)为前后的分界线,考虑枚举\(A_{k+2}\)的值为\(x\),并且令初始时所有数都为\(x\),因为序列不降,可以考虑一种不降序列的构造方式,每次选择一个前缀,并且让这个前缀减一,显然无论怎么操作整个序列始终不降。因为初始状态左边比右边大\(x\),经过调整后差值一定\(\in(0,x]\),所以左边无论怎么调整,减去的总数一定小于\(x\),右边根据这个条件增加量一定\(\in[0,x-Left)\),又因为\(A_i\in[0,n]\),即右边最多挑\(n-x\)个后缀进行操作。根据限制,记\(f(i,j)\)表示左边考虑到了第\(i\)个位置,总共减了\(j\)的方案数。记\(g(i,j)\)表示右边选了\(i\)个后缀,总共加了\(j\)的方案数。
此时的方案数即为:

\[\sum_{x=1}^n\sum_{i=0}^x\sum_{j=0}^{x-i-1}\sum_{o=0}^{n-x}f(k+1,i)\times \operatorname{g}(o,j) \]

\(S(a,b)=\sum_{i=0}^a\sum_{j=0}^b\operatorname{g}(i,j)\)
\(n=2k+1\)
就改成枚举\(k+1\)位置的值即可。
则总方案数为:

\[\sum_{x=1}^n\sum_{i=0}^xf(k+1,i)\times S(n-x,x-i-1) \]

对于\(f\),可以通过简单的背包DP\(\mathcal{ O(n^2)}\)的复杂度求出。
考虑\(\operatorname g\)的转移,一种方法是按照位置从大到小依次枚举当前的位置\(i\),调整了\(j\)次,以及总共增加的量。那么时间复杂度为\(\mathcal O(\sum_{i=1}^{\frac{n}{2}}\sum_{j=0}^n\sum_{k=j}^{\min \{i\times j,n\}}1)\),大概是\(n^3\)的,无法通过。
考虑另一种DP方式,从小到大枚举当前的位置,那么可以发现每次枚举的总增加量的初值为\(i\times j\),时间复杂度为\(\mathcal O(\sum_{i=1}^{\frac{n}{2}}\sum_{j=0}^n\max\{0,n-i\times j\})\),效率非常高。
code
方法二:
对原序列进行差分,令\(A_0=1\),则\(A_j=A_0+\sum_{i=1}^jd_i\)
条件等价于\((n=2k+1,k\in Z_+)\)

\[\sum_{i=1}^{k+1}\left(A_0+\sum_{j=1}^id_j\right)>\sum_{i=k+2}^n\left(A_0+\sum_{j=1}^id_j\right) \]

\[1+\sum_{i=1}^{k+1}\sum_{j=1}^id_j>\sum_{i=k+2}^n\sum_{j=1}^id_j \]

\[\sum_{i=1}^{k+1}\sum_{j=1}^id_j\ge\sum_{i=k+2}^n\sum_{j=1}^id_j \]

\[\sum_{i=1}^{k+1}(k-i+2)d_i\ge\sum_{i=k+2}^n(n-i+1)d_i+\sum_{i=1}^{k+1}kd_i \]

\[\sum_{i=1}^{k+1}(-i+2)d_i-\sum_{i=k+2}^n(n-i+1)d_i\geq0 \]

\[\sum_{i=1}^{k+1}(i-2)d_i+\sum_{i=k+2}^n(n-i+1)d_i\leq0 \]

\(n=2k,k\in Z_+\)
条件转化为:

\[\sum_{i=1}^k\left(1+\sum_{j=1}^id_j\right)>\sum_{i=k+2}^n\left(1+\sum_{j=1}^id_j\right) \]

\[\sum_{i=1}^k(k-i+1)d_i\geq\sum_{i=k+2}^n(n-i+1)d_i+\sum_{i=1}^{k+1}(k-1)d_i \]

\(d_i\)的系数为\(c_i\)
则上式等价于:

\[\sum_{i=1}^nc_id_i\leq0 \]

注意到\(0\leq d_i<n\)并且只有\(c_1=-1\)为负数,考虑转化上式:

\[\sum_{i=2}^nc_id_i\leq d_1\leq n-\left(\sum_{i=2}^nd_i+1\right) \]

考虑对于一个确定且合法的\(\sum_{i=2}^nc_id_i\)\(d_1\)\((n-\sum_{i=2}^n(c_i+1)d_i)\)种取值,记\(f_j\)表示\(\sum_{i=2}^n(c_i+1)d_i=j\)的方案数,则答案为:

\[\sum_{j=0}^n(n-j)f_j \]

\(f\)可以通过简单DP求出,时间复杂度为\(\mathcal O(n^2)\)
code

posted @ 2021-02-25 23:09  Beginner2670  阅读(34)  评论(0)    收藏  举报