码迷,mamicode.com
首页 > 其他好文 > 详细

【2018.10.3】万圣节的快递

时间:2018-10-04 10:49:49      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:依次   相同   状压dp   答案   接下来   疑问   ext   bsp   family   

输入格式

[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\texttt{%}$的数据:$na,nb \leq 1、n \leq 1000$

对于$10\texttt{%}-30\texttt{%}$的数据:$na,nb \leq 1$

对于$30\texttt{%}-40\texttt{%}$的数据:$na+nb=n$

对于$40\texttt{%}-60\texttt{%}$的数据:$na,nb \leq 6$

对于$60\texttt{%}-80\texttt{%}$的数据:$na,nb \leq 10, n \leq 20$

对于$90\texttt{%}$的数据:$na,nb \leq 15$

对于$100\texttt{%}$的数据:$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\texttt{s}$

空间限制:$512\texttt{MB}$

 

**,根本看不出来怎么状压dp啊!

我:“这题怎么D啊?”

自闭的小**:“直接D啊

我:“我很菜不会啊,怎么记录状态?”

自闭的小**:“直接01记录啊”

我:“01表示什么?”

自闭的小**:“车厢取没取啊”

回去又扫了遍题,听了一下午,勉强明白。

以上是废话

 

30pts:全排列乱搞(你知不知道next_permutation这么个函数)

70pts:全排列

90pts:状压dp

首先想一下,我们是要按编号顺序让快件依次出现在1号栈顶部,会冒泡排序的人应该知道 两个顺序正确的快件的相对位置是不变的。比如:

【2018.10.3】万圣节的快递

标签:依次   相同   状压dp   答案   接下来   疑问   ext   bsp   family   

原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9741311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!