QOJ.ac

QOJ

Time Limit: 1.5 s Memory Limit: 2048 MB Total points: 100

#5087. Shuffle Game

Statistics

Shuffle Game 是庄家和玩家之间的一种简单纸牌游戏。最初,庄家和玩家各获得一副相同的 $n$ 张牌。牌堆中的每张牌都有四种花色之一($C, D, H$ 或 $S$),后跟 13 种点数之一($2, 3, 4, 5, 6, 7, 8, 9, 10, A, J, K$ 或 $Q$)。因此,共有 52 种不同的牌,且牌堆中可能存在相同的牌。在牌发给庄家和玩家后,庄家首先使用任意洗牌方法从发给自己的牌堆中创建自己的牌堆 $X$,并向玩家展示 $X$。之后,玩家通过以下步骤创建牌堆 $Y$:$Y$ 最初为空。

步骤 1. 从发给玩家的牌堆中创建两个牌堆 $P1$ 和 $P2$。$P1$ 和 $P2$ 中的牌数可以不同。

步骤 2. 交错合并 $P1$ 和 $P2$。即将 $P1$ 或 $P2$ 底部的一张牌移动到 $Y$ 的当前顶部,直到 $P1$ 和 $P2$ 中都没有牌为止。注意,玩家不需要交替地从 $P1$ 和 $P2$ 中移动牌到 $Y$。此外,由于庄家和玩家都是从相同的 $n$ 张牌中创建各自的牌堆,因此 $Y$ 总是由与 $X$ 相同的牌组成。

我们将牌堆的序列定义为牌堆中从底到顶的牌的序列。玩家的得分定义为序列 $X$ 和 $Y$ 之间的最长公共子序列的长度。例如,假设给庄家和玩家的 $n = 5$ 张牌的牌堆为 $(C2, CJ, D5, HA, S7)$(此处我们将牌堆表示为序列)。庄家创建牌堆 $X = (CJ, D5, HA, C2, S7)$ 并向玩家展示。之后,玩家通过以下方式创建牌堆:(i) 从给定的牌中创建两个牌堆 $P1 = (D5, HA)$ 和 $P2 = (CJ, S7, C2)$,以及 (ii) 通过交错合并 $P1$ 和 $P2$ 创建 $Y = (D5, CJ, HA, S7, C2)$。在这个例子中,玩家的得分为 3,因为 $(CJ, HA, C2)$ 是序列 $X$ 和 $Y$ 之间的最长公共子序列。现在,在完成步骤 1 后,玩家想要知道在应用步骤 2 后能够达到的最大可能得分。例如,在上述例子中,从 $X$ 和 $Y$ 可以达到的最大可能得分为 4,因为可以通过 $P1$ 和 $P2$ 创建出 $Y = (CJ, D5, HA, S7, C2)$。

给定 $n, X, P1$ 和 $P2$,编写一个程序来计算玩家能够达到的最大可能得分。

输入格式

程序从标准输入读取数据。输入的第一行包含三个正整数 $n, p$ 和 $q$ ($3 \le n \le 500, p + q = n$),其中 $n$ 是初始牌堆中的牌数,$p$ 和 $q$ 分别是 $P1$ 和 $P2$ 中的牌数。接下来的三行分别给出了庄家的牌堆 $X$(包含 $n$ 张牌),以及玩家的两个牌堆 $P1$ 和 $P2$(分别包含 $p$ 和 $q$ 张牌)。$X, P1$ 和 $P2$ 中的每张牌表示为花色(大写字母 $C, D, H$ 或 $S$)后跟点数($2, 3, 4, 5, 6, 7, 8, 9, 10$,大写字母 $A, J, K$ 或 $Q$)。同一行中的牌按从底到顶的顺序排列。

输出格式

程序将结果写入标准输出。仅打印一行。该行应包含玩家在应用步骤 2 后从 $X, P1$ 和 $P2$ 中能够达到的最大可能得分。

样例

样例输入 1

5 2 3
CJ D5 HA C2 S7
D5 HA
CJ S7 C2

样例输出 1

4

样例输入 2

6 3 3
C9 HK SQ SQ H2 CA
CA HK SQ
H2 C9 SQ

样例输出 2

4

样例输入 3

7 3 4
S9 C10 DJ S6 S7 SA DQ
DJ S6 S7 
S9 C10 SA DQ

样例输出 3

7

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.