做题记录 25.2.4
\(\textcolor{purple}\odot\) [ABC355G] Baseball
即求
其意义为在 \([1,n]\) 中选择 \(k\) 个不同的关键点,最小化 \(1\sim n\) 每个位置到最近关键点的距离乘以该位置权值的和
括号中的部分可改为枚举相邻 \(x\) 之间的空隙的贡献(假定 \(x_0=-\infty\),\(x_{k+1}=\infty\),\(\forall j<1\lor j>n(p_j=0)\))
令 \(dp_{i,j}\) 表示 \(1\sim i\),选择了 \(j\) 个 \(x\) 的代价,则容易 \(O(n^2k)\) 求解
考虑优化
令 \(w(l,r)=\sum_{l\le i\le r} p_i\min(i-l,r-i)\),则上式等于
可证 \(w(l,r)\) 满足四边形不等式,因此可以二分队列做到 \(O(n^2k\log n)\)
可以使用 \(wqs\) 二分优化到 \(O(n\log V\log n)\),细节较多
\(\textcolor{purple}\odot\) [ABC376G] Treasure Hunting
基本和 UVA1205 Color a Tree 相同
显然对于点权最大的非根节点,都是选择其父亲后立即选该节点,因此可以把两者合并,在合并的同时累加贡献
合并后的块的权值为合并前权值的平均数
用堆维护权值
时间复杂度 \(O(\sum n\log n)\)
\(\textcolor{blue}\odot\) [ABC391G] Many LCS
\(dp\) 套 \(dp\) 模板
相似题
\(\textcolor{purple}\odot\) P10614 BZOJ3864 Hero meet devil \(\quad\) 代码
\(\textcolor{purple}\odot\) [AGC001D] Arrays and Palindrome
所有 \(a_i\) 和 \(b_i\) 一共可以产生 \(\sum_i \lfloor\frac{a_i}2\rfloor+\sum_i\lfloor\frac{b_i}2\rfloor\) 对相等关系
显然只有当相等关系数 \(\ge n-1\) 时才可能强制要求所有数都相同,因此上式不小于 \(n-1\)
而 \(\sum_i a_i\) 和 \(\sum_i b_i\) 都是 \(n\)
可以证明,当且仅当 \(a\) 和 \(b\) 中奇数的总数不超过 \(2\) 时,\(\sum_i \lfloor\frac{a_i}2\rfloor+\sum_i\lfloor\frac{b_i}2\rfloor\ge n-1\)
因此给定的 \(a\) 中奇数若超过 \(2\),一定无解
当 \(m=1\) 且 \(a_1=1\) 时,显然可以令 \(b=\{1\}\)
当 \(m=1\) 且 \(a_1\ne 1\) 时,可以构造 \(b=\{1,a_1-1\}\)
然后考虑一般情况
对于一个 \(a_i\),若其为偶数,且 \(i\ne 1,i\ne m\),对应回文区间为 \([l,r]\),则可构造一个对应区间 \([l+1,r+1]\) 的 \(b_i\),这样 \([l,r+1]\) 中所有位置之间都直接或间接存在相等关系,即该区间内所有数都相等(称为相等区间)
因此把奇数的 \(a_i\) 放到 \(a_1\) 和 \(a_m\)(若都为偶数则忽略,若只有一个则放到 \(a_1\)),然后构造 \(b_1=a_1+1\)(这样 \([1,a_1+1]\) 为相等区间),\(b_i=a_i(i\ne 1,i\ne m)\),\(b_m=a_m-1\)(注意有可能 \(a_m=1\),使得 \(b_m=0\),此时需要删去 \(b_m\))
可证其正确性
时间复杂度 \(O(m)\)
\(\textcolor{purple}\odot\) [AGC002E] Candy Piles
先将 \(a\) 从大到小排序
令 \(f(i,j)\) 表示删去前 \(i-1\) 行并全局减 \(j-1\) 时的答案
则 \(\forall a_i<j(f(i,j)=1)\)
其他情况下 \(f(i,j)=\lnot(f(i+1,j)\land f(i,j+1))\)
以下为 \(a=\{7,7,7,4,4,2,1,1\}\) 的 \(f\):
0 1 0
1 0 1
0 1 0
1 0 1 0
0 1 0 1
1 0 1 1 0
0 1 1 0 1 1 0
当 \(f(i,j)=0\) 时(\(j\le a_i\)),\(f(i-1,j)=f(i,j-1)=1\),因此 \(f(i-1,j-1)=1\)
当 \(f(i,j)=1\) 时(\(j\le a_i\)),\(f(i+1,j)\) 和 \(f(i,j+1)\) 中至少一个为 \(0\),可得 \(f(i,j-1)\) 和 \(f(i-1,j)\) 中至少一个为 \(0\),因此 \(f(i-1,j-1)=1\)
综上,对于 \(j\le a_i\),有 \(f(i,j)=f(i-1,j-1)\)
原问题的答案为 \(f(1,1)\),先找到最小的 \(i\) 满足 \(i+1>a_{i+1}\),则 \(f(1,1)=f(i,i)\),令 \(t\) 为满足 \(a_{t+1}<i\) 的最小值(假定 \(a_{n+1}=0\))
显然 \(f(i,a_i)=f(t,i)=0\),且 \(f(i,i+1\sim a_i)\) 和 \(f(i+1\sim t,i)\) 都是 \(0/1\) 相间,因此 \(f(i,i+1)=(a_i-i+1)\bmod 2\),\(f(i+1,i)=(t-i+1)\bmod 2\),由此可得 \(f(i,i)\),即 \(f(1,1)\)
时间复杂度 \(O(n\log n)\),瓶颈在于排序

浙公网安备 33010602011771号