zoukankan      html  css  js  c++  java
  • 【2018.10.3】万圣节的快递

    输入格式

    [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号栈顶部,会冒泡排序的人应该知道 两个顺序正确的快件的相对位置是不变的。比如:

  • 相关阅读:
    多媒体开发之图像---帧与场的区别
    Python之Python 安装环境搭建
    c/c++ c的第一个编译器
    多媒体开发之 H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
    多媒体开发之h264中的sps---sps信息提取之帧率
    haproxy有关session的问题
    php的安装
    centos 6.5上部署jetty
    设置浏览器的颜色
    sed awk grep三剑客常用
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9741311.html
Copyright © 2011-2022 走看看