NOI2011 NOI嘉年华
NOI2011 NOI嘉年华
第一问会 \(\mathcal O(N^3)\),第二问会 \(\mathcal O(N^4)\)
先离散化,第一问大概是设 \(f_{i,j,k}\) 表示考虑到第 \(i\) 个区间,当前选了 \(j\) 个区间,当前区间的最右点为 \(k\) 的情况下,另一个序列可以选的最多的区间,转移比较简单。
同时转移的时候我们可以保证当前的 \(f_{i,j,k}\) 中的 \(k\) 就是最大的 \(r\)
第二问考虑设 \(pre_{i,j}\) 表示时刻 \(i\) 之前选了 \(j\) 个另一个可以选的最多区间。
同时设 \(nxt_{i,j}\) 表示时刻 \(i\) 之后选了 \(j\) 个另一个可以选的最多区间。
通过 \(\mathcal O(N^3)\) 进行预处理,我们可以轻易得到所有的 \(pre\) 和 \(nxt\)
接下来考虑合并答案,不难注意到包含第 \(i\) 个区间一起被选的元素一定构成一个区间,我们直接大力枚举这个区间 \(l,r\)
那么答案即:
\[\max\{\min(pre_{l,j}+nxt_{r,k},j+k+s(l,r))\}
\]
于是喜闻乐见得到了一个 \(\mathcal O(N^5)\) 的做法...我还不如直接 Dp 求答案,第 \(i\) 个时候强制一下...
注意到答案只关乎 \(l,r\),所以我们预处理一下 \(g(l,r)\),就可以做到 \(\mathcal O(N^3)\) 的查询了,但是预处理 \(g(l,r)\) 大概是这样的一个过程:
\[g(l,r)=\max \{\min(pre_{l,j}+nxt_{r,k},j+k+s(l,r))\}
\]
观察到 \(pre_{l,x}\) 是关于 \(x\) 的减函数,同理于 \(nxt_{r,x}\),所以如果 \(j\) 增大,那么 \(k\) 必然减少,所以我们利用单调性就可以做到 \(\mathcal O(N^3)\)
好仙啊这道题。