Summary

  今天的比赛60+100+100=260分,没有想到第一题正解是搜索,我与AK差一段距离,这段距离,叫倒着搜。总的来说不是很难。

Problem

T1 天平

题目大意

  给你N个排序好的砝码的质量,从第三个砝码开始,它的重量最少是前两个砝码的质量之和。天平容不得超过C质量的质量。问最大的质量可以是多少。

想法

  一般Usaco的题目都不会水到哪里去,但是今天的。。。

  有两种方法。

(1) 爆搜+剪枝

  爆搜应该都会,参数是枚举到第K个,当前砝码是重S

  优化一:如果当前的砝码质量加上没有抉择(没有递归到)的砝码质量还是不能比当前得出的最大值大,则剪枝

  优化二:倒着搜可以减少之后的分支,当然可以降低时间复杂度,是个很了得的东西,有道题靶形数独同样适用这种方法。

(2) 中途相遇法

  这个方法效率很玄,但是总比爆搜稳妥

  可以把1~(n+1)/2和(n+1)/2~n这两段的方案数用dfs求出来,然后枚举。

  可以用二分来找,最好用两个指针。

T2 游历的路线 

题目大意

  在从1城市开开始走到n城市,期间有m天,其中第m天一定要在n城市,两两城市之间来或往的马车费用是周期性的,并且有些时候可能不可以从某个城市去另一个城市,问满足条件的最小费用。

想法

  显然可以用动态规划。

  设f[i,j]表示第i天到第j城市

  显然需要知道i-1天在哪个城市,我们可以枚举,设i-1天在k城市

  f[i,j]=min{f[i-1,k]+s}(其中s代表费用,费用的周期可以用除法原理来算(x-1) mod y+1)

  初始化显然,效率显然,答案显然。

T3 最短路(shortest)

题目大意

  求从(0,0)~(n,m)经过点的和的最小值。

  第(x,y)点的权值为f[x,y],他的计算方法是f[x,y]=f[x-1,y]+f[x,y-1],如果(x=0) or (y=0)那么f[x,y]的值为1

想法

  通过一系列的对拍,我们可以发现,如下图红边的走法,必定最优,但不知道怎么证明。我们设较短边的长为n,较长边的长为m

  

  我们可以总结成一个公式

  

  那么,关键就成了如何求出F[i,m] (i=1~n)。

  我们考虑把他转化成组合数的形式

  根据题目给出的F数组计算方法,可以得出f[x,y]=C(min(x,y),x+y)

  那么显然F[i,m] (i=1~n)就是C(i,i+m) (i=1~n)

  其实每个组合数,可以理解成一个数除另一个数,比如对于C(n,m)

  

  试想一下,如果x<y,求C(x,y)+C(x+1,y+1)+C(x+2,y+2),我们设上面这个式子分子为tot1,分母为tot2

  C(x+1,y+1)相比C(x,y)的tot1和tot2,发现tot1多乘了y+1,tot2多乘了x+1,

  C(x+2,y+2)相比C(x+1,y+1)的tot1和tot2,发现tot1多乘了y+2,tot2多乘了x+2

  说明,我们每次循环,tot1都乘i+m,tot2都乘i,那么,每次的C(i,i+m)就是tot1/tot2

  但是问题来了,tot1和tot2都很大,如果相除是不太可能的,先mod再除答案是错误的,只能使用逆元了。

逆元

  根据费马小定理可以得到如下式子

  

  两边同时除b得到,高斯研究过,发现是等价的

  

   两边同时除b得到,高斯研究过,发现是等价的

  

  两边同时乘一个a,并且交换位置,得到如下式子

  

   发现,我们要求a除b取模p的结果,其实是等价于abp-2取模p的结果的,也就是说,欲想知道a除b取模p的结果,其实就是算出abp-2取模p的结果就行了

  因为a*b mod p,是等价于a mod p*b mod p的,ak mod p是等价于(a mod p)k的,所以我们这里可以取mod来避免高精度。

  当然,F[i,m] (i=1~n)这一部分,可以使用一个组合公式就可以了,具体实现和题解请选手自行考虑。

2017.08.06【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. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. servlet保存会话数据---利用隐藏域

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...

  2. windows下载安装MariaDB10.2.17 绿色版

    1.下载 https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.17/winx64-packages/mariadb-10.2.17-w ...

  3. Oracle数据库中字符型字段按数字排序

    今天在转换数据时,遇到了一个主键排序的问题.字符型的主键,保存的都是数字,数据导过来以后发现数据排序都是乱的,就想着按数字规则排序. 但发现to_number总是报错,就想着里面应该是有字符存在.后来 ...

  4. 一脸懵逼学习oracle

    oracle的默认用户:system,sys,scott: 1:查看登录的用户名:show user: 2:查看数据字典:dba_users; 3:创建新用户 (1)要连接到Oracle数据库,就需要 ...

  5. JVM 方法区内存扩大 以及开启GC

    因为应用使用了OSGi框架,<深入理解JAVA虚拟机>中对使用OSGi时可能产生的方法区溢出有所描述 第一部分: 第二部分 可见,OSGi会动态生成大量Class,在OSGi中,即使是同一 ...

  6. update + join 多表操作

    UPDATE vtiger_notificationcf as a INNER JOIN vtiger_crmentity as b ON a.notificationid = b.crmid SET ...

  7. python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等

    ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...

  8. python全栈开发day59-Django基础

    一.今日内容总结 1.HTTP协议: 请求:浏览器发给服务端的消息 格式: 请求方法 URL 协议版本\r\n k1: v1\r\n k2: v2\r\n \r\n 请求体(请求数据) 响应:服务端返 ...

  9. 初识Python.day2

    一. python运算符 算数运算符  比较运算符 赋值运算符 逻辑运算符 成员运算符 二. Python基础数据类型 1. python字符串总结 # 首字母变大写 # a1 = "jiu ...

  10. python---读取/写入excel用例数据

    使用excel管理用例 ①.读取excel的用例数据,每一类参数保存在list中返回:②.那么接下来使用unitest编写用例时,可以去调用这个函数.使用里面的数据: 个人认为好处是,大部分人还是习惯 ...