第一题:笨小猴

模拟

 

第二题:火柴棒等式

搜索

深搜不用说,确定出两个加数然后判断能否拼出等式。

枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解。不过这题的数据貌似很温和,我从 0~1000 枚举也能过。

 

第三题:传纸条

多线程动态规划

跟 2000 年的方格取数很像。

还是看做两个人同时从左上角走到右下角。用 f(i, j, k) 表示横纵坐标和为 i,第一个人的行坐标为 j,第二个人的行坐标为 k 时的最大和。

由于一个地方不能走两次,所以对于除了终点以外的所有 j = k 的情况,其 f 值应等于负无穷。(j=k && i!=m+n && j!=m 才是终点的情况)

 

第四题:双栈排序

二分图判定

首先想到的是贪心,能拿 30~50 分左右。

然后看了下题解。(参考 https://www.byvoid.com/blog/noip2008-twostack/http://www.cnblogs.com/vb4896/p/3875833.html

首先我们要判断一个序列能否进行双栈排序。两个栈,容易让人想到二分图。按照这个思路往下想,二分图中的边所代表的关系很明显是指两个数字不能进同一个栈。那么如何判断两个数字能否进同一个栈?

对于任意的数对 (i, j) 满足i<j且a[i] < a[j],若存在 k 使得 k > j > i 且 a[k] < a[i] < a[j],则 i 和 j 必然不能进入同一个栈。(简单解释一下:因为 k 在 i 和 j 的后面,所以在 k 出栈之前 i 和 j 都在栈内,如果 i 和 j 在同一个栈内,j 必然比 i 后入栈,也必然比 i 先出栈,这样就违背了应有的顺序,所以 i 和 j 不能在同一个栈内)

那么我们只需对于满足上述条件的数对 (i, j) 连一条边,最后染色判断是不是一个二分图即可。

判断数对 (i, j) 是否满足条件,如果用朴素的算法,时间复杂度将是 O(n)。我们每次判断的过程事实上是判断在 j 后面的数字中能否找到一个小于 a[i] 的数字。那么我们只需知道 a[j+1]...a[n] 中的最小值即可。用 f[i] 表示 a[i]...a[n] 中的最小值,则 f[i] = min{ f[i+1], a[i] }。每次对于 (i, j) 只要判断 f[j+1] 是否小于 a[i] 即可。复杂度 O(1)。

由于我们要得到字典序最小的方案,那么很明显应该尽量将顺序靠前的数字安排在栈 1 中。

如果得到的是二分图,进行贪心即可。每次如果可以进行多种操作,选择字典序最小的操作。

(顺便一提,BYVoid 大神的代码是有问题的,可以参加那篇文章下面的第一条评论。)

noip2008提高组题解的更多相关文章

  1. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  2. NOIP2008普及组题解

    NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...

  3. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  4. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  5. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  6. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  7. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  8. NOIP2008普及组 题解 -SilverN

    T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...

  9. [NOIP2008] 提高组 洛谷P1006 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

随机推荐

  1. css的transition 属性

    把鼠标指针放到 div 元素上,其宽度会从 100px 逐渐变为 300px: div { width:100px; transition: width 2s; -moz-transition: wi ...

  2. 【BZOJ】【1934】【SHOI 2007】Vote 善意的投票

    网络流/最小割 简单题= =直接利用最小割的性质: 割掉这些边后,将所有点分成了两部分(两个连通块),我们可以假定与S相连的是投赞成票,与T相连的是投反对票. 那么如果一个小朋友原本意愿是睡觉,那么连 ...

  3. 【UVA】【11427】玩纸牌

    数学期望 也是刘汝佳老师白书上的例题……感觉思路很神奇啊 //UVA 11427 #include<cmath> #include<cstdio> #include<cs ...

  4. 阿里云CentOS6.3 安装MongoDB教程

    安装说明 系统环境:Centos-6.3安装软件:mongodb-linux-x86_64-2.2.2.tgz下载地址:http://www.mongodb.org/downloads安装机器:192 ...

  5. 【Asp.net MVC ---杂七杂八】

    @RenderSection 母模板:_mainLayout.cshtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...

  6. 【面试题021】包含min函数的栈

    [面试题021]包含min函数的栈  MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...

  7. What is Object Oriented Design? (OOD)

    Object Oriented Design is the concept that forces programmers to plan out their code in order to hav ...

  8. sql 判断两个时间段是否有交集

    本文转自CSDN 链接地址:http://blog.csdn.net/dasihg/article/details/8450195 时间段:starttime_1到endtime_1,starttim ...

  9. java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

    /*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...

  10. hdu 2582 f(n) 数学

    打表找规律: 当n为质数是,GCD(n)=n; 当n为质数k的q次方时,GCD(n)=k; 其他情况,GCD(n)=1. 代码如下: #include<iostream> #include ...