输入格式
[LazyJazz还是小白菜的时候……]
栈就好比一个垃圾桶…… —— CHXER
[今天……]
LazyJazz的1月1日大买特买的订单今天(11月1日)终于到货了,算法(SF)快递公司把LazyJazz订单里所有的快件分到了两列火车上,一列上午到站,一列下午到站。收到通知的LazyJazz无比激动,开上了他花了半年时间造出的两辆快件接收车——两辆卡车各顶着一个“垃圾桶”,急急忙忙赶往了火车站。
接收快件的流程是这样的:
上午到站的那列火车(简称1号火车,下午到站的简称2号火车)里所有的快件需要先用第一辆快件接收车拉走。2号火车里所有的快件需要用第二辆快件接收车拉走。
上午,1号火车有 $na$ 节车厢,其中第 $i$ 节车厢内共有 $ka_i$ 个快件排成一排,LazyJazz需要每次需要选择一节车厢,将其中的全部快件依次拿出,扔进他的第一辆快件接收车的桶里,直到所有车厢内快件均被取出。
下午,2号火车有 $nb$ 节车厢,其中第 $i$ 节车厢内共有 $kb_i$ 个快件排成一排,LazyJazz同样需要每次需要选择一节车厢,将其中的快件全部依次拿出,扔进他的第二辆快件接收车的桶里,直到所有车厢内快件均被取出。
LazyJazz订的 $n$ 个快件中,每个快件都有一个独一无二的,在$[1,n]$范围内的编号,在接收结束回到家后,LazyJazz要求他的管家从 $1$ 到 $n$ 按编号扫描并记录每个快件的信息。
记录过程是这样的:
我们先将第一辆快件接收车上的桶命名为1号桶,第二辆快件接收车上的桶命名为2号桶。由于“垃圾桶”与栈的相似性,有一个机械臂,每次操作可以将一个桶顶端的快件拿到另一个桶的顶端,管家需要不断操作这个机械臂,使得1号桶顶端依次出现编号为 $1$,$2$,$3$ …… $n$ 的快件,并记录快件信息。即,先操作机械臂使得1号桶顶放的是1号快件,记录信息;然后再操作机械臂使得1号桶顶放的是2号快件,记录信息……以此类推。。。
不幸的是,快件运到的时候,每个快件不定被放在哪列车的哪个车厢的哪个位置。好消息是,我们知道两列车的每节车厢里放的快件编号依次是多少。LazyJazz出于人道主义考量,决定找出一个选择车厢的顺序,使得管家在记录快件信息时操作机械臂的操作次数最少。
现在,给你两列火车每节车厢内的快件排列信息,你能回答在LazyJazz选择车厢顺序合理的情况下,管家记录快件时操作机械臂的操作次数最少是多少吗?
给个例子:
假若一共有 $6$ 个快件
1号火车共有 $1$ 节车厢
第 $1$ 节车厢内快件编号依次为:2-4-3
2号火车共有 $2$ 节车厢
第 $1$ 节车厢内快件编号依次为:1-5
第 $2$ 节车厢内快件编号依次为:6
那么初始的时候
1号桶从顶到底快件编号只能是:3-4-2(2先拿出来,放在最底下,4第二个拿出来,放在中间,3最后,放在最顶)
2号桶从顶到底快件编号可以是:6-5-1或5-1-6,而5-1-6更优(前者最终需 $15$ 次操作,后者仅需 $13$ 次)
答案为 $13$
操作详情:
初始状态下:{3-4-2},{5-1-6}
经过$2$次操作:变成{1-5-3-4-2},{6}
经过$4$次操作:变成{2},{4-3-5-1-6}
经过$2$次操作:变成{3-4-2},{5-1-6}
经过$1$次操作:变成{4-2},{3-5-1-6}
经过$2$次操作:变成{5-3-4-2},{1-6}
经过$2$次操作:变成{6-1-5-3-4-2},{}
总共$13$次操作。
输入格式
第一行三个非负整数 $n$ 、 $na$ 、 $nb$ ,依次表示快件数,1号火车车厢节数,2号火车车厢节数
接下来 $na$ 行,每行第一个数为一个正整数 $ka$ ,紧跟着 $ka$ 个正整数 $A_i$,表示1号火车的一节车厢内有 $ka$ 个快件及其中快件编号的排列
接下来 $nb$ 行,每行第一个数为一个正整数 $kb$ ,紧跟着 $kb$ 个正整数 $B_i$,表示2号火车的一节车厢内有 $kb$ 个快件及其中快件编号的排列
其中保证$sum{ka}+sum{kb}=n$,所有 $A_i$ 与 $B_i$ 不重复,且保证 $1 leq A_i,B_i leq n$
输入中一个快件排列,先出现的编号先被放入接收车,顺序不可逆,详情请参见样例
输出格式
一个整数,表示所有车厢选择方案中,最终机械臂操作次数最少的操作次数
样例一
input
6 1 2
3 2 4 3
2 1 5
1 6
output
13
explanation
该组样例与题目描述中的例子相同,如有疑问请反观题目描述
样例二
input
10 2 3
3 2 4 9
1 7
2 8 1
2 3 5
2 10 6
output
42
样例三
见样例数据下载
限制与约定
对于前$10 exttt{%}$的数据:$na,nb leq 1、n leq 1000$
对于$10 exttt{%}-30 exttt{%}$的数据:$na,nb leq 1$
对于$30 exttt{%}-40 exttt{%}$的数据:$na+nb=n$
对于$40 exttt{%}-60 exttt{%}$的数据:$na,nb leq 6$
对于$60 exttt{%}-80 exttt{%}$的数据:$na,nb leq 10, n leq 20$
对于$90 exttt{%}$的数据:$na,nb leq 15$
对于$100 exttt{%}$的数据:$na,nb leq 20、n leq 100000, 1 leq na+nb leq n$
保证$sum{ka}+sum{kb}=n$,所有 $A_i$ 与 $B_i$ 不重复,且保证 $1 leq A_i,B_i leq n$
时间限制:$2 exttt{s}$
空间限制:$512 exttt{MB}$
**,根本看不出来怎么状压dp啊!
我:“这题怎么D啊?”
自闭的小**:“直接D啊”
我:“我很菜不会啊,怎么记录状态?”
自闭的小**:“直接01记录啊”
我:“01表示什么?”
自闭的小**:“车厢取没取啊”
回去又扫了遍题,听了一下午,勉强明白。
以上是废话
30pts:全排列乱搞(你知不知道next_permutation这么个函数)
70pts:全排列
90pts:状压dp
首先想一下,我们是要按编号顺序让快件依次出现在1号栈顶部,会冒泡排序的人应该知道 两个顺序正确的快件的相对位置是不变的。比如: