这一年的前三题虽然难度不高,但是第二题极为繁琐,想在考场上用较短的时间拿到第二题的分数难上加难。所以必须要调整策略,争取拿其他三题的分数。第四题是比较普通的搜索题,分数比较好拿,但是很容易想成树形DP,就只能拿30~50分。

 

第一题:神经网络

模拟

有几个注意点:

  1. 输入层(即第一层)的结点的U(阈值)是没有用的;
  2. 题目说输出「最后状态非零的输出层神经元状态」,但实际上输出的是状态大于0的值。

由于没有注意到神经元只有在兴奋状态时才会向下传送信号,所以WA了1次。

 

第二题:侦探推理

模拟+枚举

我用的是比较笨拙的枚举策略:枚举哪些人说的是真话,哪些人说的是假话。

但更好的策略是:枚举谁是凶手。

繁琐但不难,注意几个点:

  1. 凶手只有一个。那么当只有一个人且根据其话语无法推出是不是凶手时,其必然是凶手;
  2. 程序无法确定出凶手时可能是Cannot Determine,也可能是Impossible,需要根据具体情境进行特殊处理。

花了很久才AC,与我的解题策略的选择有莫大的关系。

 

第三题:加分二叉树

动态规划

很可惜做这道题在最开始的时候就想错了,用贪心写了一下,结果只过了1个点。应该说很多题目都是看似可以用贪心做但其实应该用动规(01背包、石子合并等),这也是以后做题时的一个注意点。

首先题目要求构造的树的中序遍历要有序,其实也就是由序列(1,2,…,n)构造出一棵二叉排序树:选择某个数字为根,把比它小的数字安排在它的左子树,把比它大的数安排在它的右子树,递归进行。

问题就是如何选择根?

由题意可以看出,一个数字的层次越深,它对整个二叉树的加分的「贡献」就越大,所以我想到的是贪心策略:将权值大的结点尽量安排在树的叶端,即把权值最小的结点作为根。

这样的贪心策略看似正确而且也符合样例数据,但其实是错误的。根据上面所述,如果按照贪心策略构建出这样的树,那么最理想的状态是结点的权值与深度应该成正比(但是为了满足BST的性质需要进行调整)。如果每次将权值最小的结点作为根,往往达不到这样的状态。比如:结点1,2,…,n对应的权值为99,2,2,…,2,则权值最大的结点1会被安排在权值最小的结点2的左子树而且成为叶子结点,这样分配明显是很不合理的。

正确的策略应该是采用动态规划,枚举需要用哪个结点作为根。

f(l, r) 表示将区间 [l, r] 构建成加分二叉树所得的最大加分(区间 [l, r] 表示结点编号),则

f(l, r) = max{ f(l, j) * f(j+1, r) + w(j), l<=j<=r}

边界条件:f(l, r) = 1 (l > r)

时间复杂度:O(n^3)

 

第四题:传染病控制

搜索

一开始以为是动规,但实际上有后效性。

按层进行搜索,枚举哪一条边需要被截断,将已被阻断的子树上的结点做标记,然后搜索下一层。

有一个普通的剪枝:如果当前感染人数大于已找到的最小人数则回溯。

但是很奇怪的是只有一个点过不了,而且答案只和标准答案相差1,实在无力调试,所以就针对特殊情况打表骗了个AC。

 

经验教训:

  1. 要总结平时遇到的容易想错算法的题目(动规想成贪心、搜索想成动规),寻找其特点与规律;
  2. 多做题目就会对各种算法适用的题型有更清晰的认识和更深刻的理解,帮助解题;
  3. 不能轻视模拟题,有些模拟题题目较复杂,要有提炼题目的能力。

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

  1. noip2010提高组题解

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

  2. NOIP 2014 提高组 题解

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

  3. NOIP 2001 提高组 题解

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

  4. NOIP 2000 提高组 题解

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

  5. 【NOIP2018】提高组题解

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

  6. 题解【洛谷P1038/CJOJ1707】[NOIP2003提高组]神经网络

    [NOIP2003]神经网络 Description 问题背景:人工神经网络( Artificial Neural Network )是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款 ...

  7. NOIP2003[提高组] 加分二叉树 题解

    题意 给出一个有n个节点的二叉树的中序遍历,以当前节点为根的树的分数等于左节点分数* 右节点分数+根节点分数,叶子节点的分数等于它本身,求最大分数,以及分数最大的树的先序遍历 一道区间dp题,因为要求 ...

  8. noip2009提高组题解

    NOIP2009题解 T1:潜伏者 题目大意:给出一段密文和破译后的明文,一个字母对应一个密文字母,要求破译一段密文,如果有矛盾或有未出现密文无法破译输出failed,否则输出明文. 思路:纯模拟题 ...

  9. noip2008提高组题解

    第一题:笨小猴 模拟   第二题:火柴棒等式 搜索 深搜不用说,确定出两个加数然后判断能否拼出等式. 枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解.不过这题的数据貌似很温和,我 ...

随机推荐

  1. Linux 命令整理 —— 基本操作

    1.ls 目录列举(dir) 一般我们这么写: ls 列举当前目录的所有文件,如果文件很多的话,这么看很复杂.我们可以加关键字,例如我们要看包含xml的全部文件. ls *xml* 如果这个时候,我们 ...

  2. css块级元素、行内元素

    说说对html页面元素的排列认识: html中所有元素从上到下排列,所以需要css来对其中的元素进行排序.调节样式,并用js为其添加交互效果. css的排序.定位是相对块级元素而言的,margin/p ...

  3. My_Plan part1 小结

    数位DP AC十道题目以上 成就达成 八月份!三个月!想想就令人兴奋呢 开始写总结啦 貌似简单的数位DP只需要改改模板就可以啦 就按照我的做题顺序开始总结吧 先是学习了一发模板:http://www. ...

  4. BZOJ 3198 SDOI2013 spring

    为什么SDOI省选一年考两次容斥原理? 我们很容易发现>=k个相等时很好计算的 但是我们要求恰好k个,那么我们容斥即可 至于计算>=k个相等,首先我们枚举相等位置,对每个串对应位置做一遍h ...

  5. 初识io流条件状态

    一  流状态    C++中的输入输出系统负责记录每一个输入输出操作的结果信息,这些当前的状态信息被包含在io_state类型的对象中.io_state是一个枚举类型(就像open_mode一样),以 ...

  6. 自旋锁spin_lock和raw_spin_lock

    自旋锁spin_lock和raw_spin_lock Linux内核spin_lock.spin_lock_irq 和 spin_lock_irqsave 分析 http://blog.csdn.ne ...

  7. spring是怎样面向接口编程的?

    1.只要分层,就涉及到接口来连接.各层之间只通过接口来向外暴露功能. 2.spring中service层调用dao层时候,service层声明接口变量,具体接口实现可以ioc注入

  8. 漫谈C语言及如何学习C语言

    抄自:http://my.oschina.net/apeng/blog/137911 目录:[ - ] 为什么要学习C语言? C语言学习方法 1,参考书籍 2,动手实验环境搭建 3,网络资源 附录 一 ...

  9. kaili开启sshd服务

    使用xshell远程连接kali 2.0时要开启kaili上的sshd服务,具体方法如下: 命令: vim /etc/ssh/sshd_config # Package generated confi ...

  10. HttpServletRequest接口实例化的使用

    HttpServletRequ接口的使用和jsp内置对象的request对象非常类似,request对象其实 就是HttpServletRequest接口的一个实例,不过气实例化的过程是自动的,无须自 ...