题解:P6883 [COCI2016-2017#3] Kroničan
看到 $1 \le N,K \le 20$ 的数据范围,不难想到状态压缩 $\texttt{dp}$。设 dp[i] 表示所有玻璃杯的状态为 $i$ 时的最小花费。 由于是最小花费,初始化时会将所有的 dp[i] 默认为 INF,然后再特殊处理 dp...
看到 $1 \le N,K \le 20$ 的数据范围,不难想到状态压缩 $\texttt{dp}$。设 dp[i] 表示所有玻璃杯的状态为 $i$ 时的最小花费。 由于是最小花费,初始化时会将所有的 dp[i] 默认为 INF,然后再特殊处理 dp...
丹钓战,顾名思义单调栈。 首先是 $\texttt{15 pts}$ 做法,对于每个询问的区间,进行一次单调栈的模拟。时间复杂度 $O(nq)$。 然后可以稍微的优化一下,我们可以进行 $n$ 次单调栈来维护以第 $i$ 个数为起点的区间的答案...
这是一道不错的思维题,赛时我的思路是逆向思维法。从长度为 $n$ 的合法区间开始判断,因为由 $f_{r - l + 1} < \rm Mex_{l,r}$可知,若让区间成为合法区间,需要使 $\rm Mex_{l,r}$ 尽可能大。所以就有了...
这道题和求普通的割边十分相似。最开始的思路就是将 $a$ 和 $b$ 的情况分别求解,然后再进行合并,然而这样并不行。 本题的关键通信线路和割边并不是充要条件,而是充分不必要条件。有些边虽然是割边,但该边将所有点分为两部分后每部分均有 $A$ 与 $...
首先时最简单的做法,两层循环逐一判断,时间复杂度为 $O(n^2)$。但是现在无法通过最后一个数据点,需要优化程序。 对于一个从 $i$ 开始的情况,首先用一次二分找到最远的点符合只出现 H 或 G 的情况,设为 $l$。然后再用一次二分找到最远的点...
一道很普通的计数 $\texttt{dp}$。设 $dp_{i,j,k,l}$ 表示在 $(i,j)$ 位置上,还剩下 $k$ 次行走方向改变,当前的方向为 $l$ 时的方案数。因为只能够向下走,则令 $l \in \{0,1\}$ 表示这两种方向。...
求起点到终点所花费的最短时间,可以用 bfs 来解决问题。对于一个点,包含四个信息,分别是横纵坐标、当前花费的时间和方向。由题可知,有若干个起点,所以首先把所有起点均加入到队列中去。一共有八种不同的关键字符,一一列举即可,注意判断边界的条件。 # ...
由于 $a_i \in [-30,30]$,所以我们可以考虑枚举区间出现的最大值。由于可以只选一张牌,所以最大得分的最小值为 $0$。 那么我们首先枚举 $i \in [1,30]$,表示该段区间的最大值为 $i$,然后内层循环求和,即 sum +=...
这道题和 $\texttt{P2432}$ 的题目是一样的。考虑动态规划的作法,设 $dp[i]$ 表示原字符串的前 $i$ 位最少需要删除的字符的数量,显然最后的答案是 $dp[L]$。 对于初始值,因为求最小值,所以先把 $dp[i]$ 均设置为...
考虑动态规划的作法,设 $dp[i]$ 表示原字符串的前 $i$ 位最少需要删除的字符的数量,显然最后的答案是 $dp[L]$。 对于初始值,因为求最小值,所以先把 $dp[i]$ 均设置为 $+\infty$,同时由转移方程的含义可知 $dp[0]...