这是一个组合计数问题。直接枚举所有可能的操作序列(其数量为卡特兰数 Cn,当 n=12 时非常大)来计算总收益是不可行的。
我们可以转换思路,不按操作序列来累加收益,而是按每个可能的收益项来计算它在所有方案中出现的总次数。
一个收益项由 xi⋅yk 构成,表示元素 xi 在暂存区 Q 的大小为 k 时被取出。我们只需要计算出对于每一对 (i,k),元素 xi 在暂存区大小为 k 时被取出的这种情况在多少个不同的操作序列中发生。记这个次数为 N(i,k)。
最终的总收益为:
给定长度均为 n 的两个序列 X 和 Y,下标从 1 开始。X 的第 i 个元素记为 xi,Y 的第 i 个元素记为 yi。
另有一个初始为空的暂存区 Q,Q 具有“后进先出”的性质:每次只能将新元素放在最上层,且只能取走当前最上层的元素。
现可以进行以下两种操作:
一个操作方案恰好由 2n 次操作组成,且每次执行操作 1 时 X 必须非空,每次执行操作 2 时 Q 必须非空。
一个操作方案的得分定义为该方案中所有操作 2 获得的分数之和。若两个方案在任意一个时刻执行的操作种类不同,则认为它们是不同的方案。
你需要计算所有不同的合法操作方案的得分之和,并输出该值。
约束:n 为整数,满足 1≤n≤12。序列中的元素均为正整数,且 1≤xi≤10,1≤yi≤10。
第一行包含一个正整数 n,表示序列的长度。 第二行包含 n 个正整数,第 i 个数为 xi,表示序列 X。 第三行包含 n 个正整数,第 i 个数为 yi,表示序列 Y。
输出一个整数,表示所有不同操作方案的得分之和。
输入
1
5
7
输出
35
说明
当 n=1 时,只有 1 种合法操作方案:先将 x1=5 入栈,然后出栈。出栈时栈大小为 1,获得分数 y1×v=7×5=35。所有方案得分之和为 35。
输入
2
2 1
3 2
输出
17
说明
n=2 时共有 2 种合法方案。 方案1:入 2,入 1,出 1,出 2。得分:出 1 时栈大小 2,得 y2×1=2;出 2 时栈大小 1,得 y1×2=6,总分 8。 方案2:入 2,出 2,入 1,出 1。得分:出 2 时得 y1×2=6;出 1 时得 y1×1=3,总分 9。 两方案得分之和为 8+9=17。也可用公式 2×x1×y1+x2×y1+x2×y2=2×2×3+1×3+1×2=17 直接求出。
输入
3
1 1 1
1 1 1
输出
15
说明
当 X 和 Y 的所有元素均为 1 时,每次出栈操作不论栈大小和出栈元素值,得分均为 1×1=1。因此总得分等于所有合法方案中出栈操作的总次数。 n=3 时的合法方案数等于卡特兰数 C3=5,每个方案恰好包含 3 次出栈操作,故总出栈次数为 5×3=15,答案即为 15。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册