Summary

  今天的比赛打得还不错,第一题被同桌灌输的贪心,纯模拟洗脑了,然后steal的看了一下,发现怎么也对不了,一直在检查。最后10分钟才找出反例,推出动态规划方程,没有想到怎么转移,比赛就结束了。第二题题意理解错误了,但是还是拿到了充满希望的10分,第三题看到题目就直接上了线段树,我想没几个人能像我一样5分钟想完并打完这道题了。贪心一定要看到反例,不能盲目去做,否则浪费了时间,更让心情愈来愈不甘。

Problem

T1 解题

题目大意

  奶牛有P (P≤300) 道题目要做。他们的月薪是M (m≤1000) 元。
  每做一道题需要两笔付款,第一笔A_i(1≤A_i≤M)元在做题的那一个月初支付,第二笔B_i元(1≤B_i≤M)在做完后的下一个月初支付,牛没有任何存款意识
  题目必须按大概顺序解出。比如,题目3必须在解题目4之前或同一个月解出.

  找出牛们做完所有题目并支付完所有款项的最短月数。

想法

  刚开始比赛的是被被传销洗脑成贪心,结果一直在检查错误,殊不知,其实是动态规划,下面给一个贪心的反例

  7 3 
  2 5 
  2 5 
  5 2

  按照贪心,答案是6,其实最优应该是5

  我们有两种DP的方法,一种是被姚大神称为垃圾的,另一种也是被他称为垃圾的

(1) 动态规划

  我们设f[i,j]表示你解答前i个问题,最后一次连续解答了j个问题的最少月份数

  状态转移方程:

  1.在前i~j件事情付清尾款当月付j个项目的首款:d[i][j]=min(d[i-j][x]+1) 当sumb[j-1-x+1][j-1]+suma[j][i]≤pay}

  2.在前i~j件事情付清尾款后的一个月付j个项目的首款:d[i][j]=min(d[i-j][x]+2) 当 sumb[j-1-x+1][j-1]≤pay && suma[j][i]≤pay

  x表示上一个月同时付了x个problem的首款,suma,sumb分别是输入的前缀和

  假设我们现在已经完成了i-j个problem的解答(上一个月同时付了x个problem的首款),现在要付连续j个problem的首款。在本月结束时,我们要保证前i个程序都已经在解答中(或者已经解出)且本月进行了j个解答,那么截止本月初付过前x个problem的尾款后,总共是完成了i-j个problem;本月要完成的问题的编号是从i-j+1一直到i,那么我们就可以推出,上一个月要完成的问题的编号为i-j-x+1i-j。按照我们上面分析的,我们有两种选择: 
  1.同时付清上一组x个problem的尾款和这一组j个problem的首付; 
  2.在上一组x个problem的尾款付清后,进行j个problem的首付。 
设suma[i][j]、sumb[i][j]分别为首付前缀和尾款前缀和,分别表示第i个问题至第j个问题的首付之和、第i个问题至第j个问题的尾款之和。 
  无论如何,都需要保证这个月的结余必须为正数、且下一个月将要付清的本月尾款必须也不能超过工薪(如果大于了工薪,那么本月或下一个月奶牛就破产了=_+)。

(2) 动态规划

  我们设f[i,j]表示你在第i天,选了j个任务的最少欠费。枚举一个k,表示上个月选到最后的题目是多少

  方程为f[k,i]:=min(sum_b[j+1,i])当sum_a[j+1,i]+f[k-1,j]≤m

  sum_a[j,i]表示a[j]到a[i]的和,sum_b亦然

  sum_a[j+1,i]+f[k-1,j]≤m其实就是如果上个月选的题目的首付,之前的欠费,是否会使奶牛破产

  f[k,i]表示,当前的欠费,上一次选了多少题目的第二笔付款,欠费就是对应的sum_b

T2 JIH的玩偶(tree)

题目大意

  这张网以玩具厂为总代理(根),构成一颗树。每个节点都代表一个客户,且每个节点都有重要度ai。JIH想将这些客户划成若干类别,当然同一类的客户重要度相差太大总是不妥。所以JIH决定先进行市场调研。JIH会选择两个客户X,从X向根走一共k个节点进行调查。调查的结果是这条路径上重要程度相差最大的两个客户的差值是多少。因为特殊需要,要求重要度大的客户必须在重要度小的客户后面(顺序为X到根,若序列为递减,则输出0,详情见样例)。

想法

  树上倍增,第一次做

  其实就是类似于树上求RMQ,跟RMQ思想差不多,维护类似的,设f/gmax/gmin/gans[i,k]表示从i到i的第2k个祖先中,对应的编号,最大值,最小值,最大值减最小值。

  其实就是在是查询难一点而已

  对于每个询问,先找到最大的k使得g[x,k]在终点或终点以下,

  Ans=max(ans,gu[x,k],gb[x,k]-last);

  last:=min(last,gs[x,k]);//最小值

  x:=g[x,k];//当前点

  如此递归求解,直到x为终点

  画一下图就知道了,其实很简单的,不必多说

T3 进化序列(evolve)

题目大意

  一个基因Ax 可以进化为序列中在它之后的基因Ay。这个进化的复杂度,等于Ax | Ax+1...| Ay的值,其中| 是二进制或运算。
  Abathur 认为复杂度小于M 的进化的被认为是温和的。它希望计算出温和的进化的对数。

想法

  维护一个最大的k,表示当前a[i~k]的数or起来是符合题目条件的,且保证k>i

  其贡献值为k-i

  因为or运算是不会变小的,所以k是线性的,关键是快速判断a[i~k]的数是否符合题目条件

  可以用线段树,树状数组,RMQ

  不会的可以去学。

2017.07.11【NOIP提高组】模拟赛B组的更多相关文章

  1. 2017.1.16【初中部 】普及组模拟赛C组总结

    2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...

  2. 2018.12.30【NOIP提高组】模拟赛C组总结

    2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...

  3. ZROI提高组模拟赛05总结

    ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...

  4. NOIP2017提高组 模拟赛15(总结)

    NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...

  5. NOIP2017提高组 模拟赛13(总结)

    NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...

  6. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  7. NOIP2017提高组模拟赛 8(总结)

    NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...

  8. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

  9. NOIP2017提高组模拟赛 7(总结)

    NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...

  10. NOIP2017提高组模拟赛5 (总结)

    NOIP2017提高组模拟赛5 (总结) 第一题 最远 奶牛们想建立一个新的城市.它们想建立一条长度为N (1 <= N <= 1,000,000)的 主线大街,然后建立K条 (2 < ...

随机推荐

  1. RHEL7恢复root密码

    RHEL7恢复root密码 首先关闭SELINUX [root@panda ~]# getenforce Disabled 然后重启,按↑↓键,进入如下界面,选择第一项,按下e键进行编辑 在此界面找到 ...

  2. robocopy的用法,数据库局域网备份

    robocopy,我主要是用来进行局域网数据库备份使用,不得不说这个小工具速度还是蛮快的,同时属于系统内置功能,用着还算方便. 这项功能就是RoboCopy,它是一个命令行的目录复制命令,自从Wind ...

  3. ubuntu16.04安装skype

    ubuntu16.04安装skype 一句命令搞定 wget https://repo.skype.com/latest/skypeforlinux-64.deb && sudo dp ...

  4. Tensorflow name_scope

    在 Tensorflow 当中有两种途径生成变量 variable, 一种是 tf.get_variable(), 另一种是 tf.Variable(). 使用tf.get_variable()定义的 ...

  5. Maya闪退

    电脑上装的Maya2015突然就打不开了,窗口闪一下就关闭,也没有任何提示. 将15卸载装了Maya2016还是一样. 再彻底卸载16,装了15,还不行... 将系统环境变量中PYTHONHOME和P ...

  6. 牛客网练习赛t2(线段树)

    题解: 好像因为他说了 数据范围全部在ll以内 所以直接暴力就可以过了 比较正常是用线段树来维护 洛谷上有道模板题是支持加,乘,区间和 而这题还多了区间平方和的操作 按照那题的操作 我们维护的时候保证 ...

  7. crunch创建自己的密码字典文件

    http://www.2cto.com/article/201608/542026.html

  8. Python学习(二十七)—— Django和pymysql搭建学员管理系统

    转载自http://www.cnblogs.com/liwenzhou/p/8270250.html 一.学员管理系统 1.项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的e ...

  9. JVM及class文件加载问题-学习使人快乐4

    今天看了些粗浅的JVM原理的知识 1.class文件编译过程: 词法分析 语法分析 源码 ---------Token流-------------语法树----------字节码 2.classloa ...

  10. 函数对象的call()、apply() 方法区别

    函数对象的call().apply() 方法 函数作为对象提供了call(),apply() 方法,他们也可以用来调用函数,这两个方法都接受一个对象作为参数,用来指定本次调用时函数中this的指向: ...