noip2006提高组题解
第一题:能量项链
区间型动态规划
据说这题在当年坑了很多人。
f(i, j) 表示从第i个珠子开始合并j个珠子所释放的最大能量。
f(i, j) = max{ f(i, k} + f(i+k, j-k) + head(i) * head(i+k) * head(i+j) , 0<k<j}
边界条件:f(i, 1) = 0
第二题:金明的预算方案
背包型动态规划
01背包的加强版,对于每个主件有五种选择方式:不购买主件、购买主件、购买主件和附件1、购买主件和附件2、购买主件和附件1和2。
一个显著的时空优化:将物品的价格除以10.
第三题:作业调度方案
模拟
据说原来是一道搜索题,但是为了平衡整卷难度所以简化了许多。不难,仔细就好。
第四题:2^k进制数
递推、高精度
首先想到的递推式:用 f(i, j) 表示以数字 i 开头且有 j 位的数字个数,则
f(i, j) = sum{ f(i+1, j-1), f(i+2, j-1), ... }
那么最终答案也是将某些 f 值相加。
既然我们在状态转移和求最终结果时要的都是和,不妨直接在 f 中保存之前状态的和。
所以我们可以用 f(i, j) 表示第一位不小于 i 且有 j 位的数字个数,则
f(i, j) = f(i+1, j)+f(i+1, j-1)
解释一下,第一位不小于 i 有两种情况:
1. 第一位等于 i,那么第二位至少是 i+1,即 f(i+1, j-1)
2. 第一位大于 i,即第一位大于等于 i+1,即 f(i+1, j)。
那么最终答案的求解可以分类讨论:
- 若 k | w,则答案等于 sum{ f(1, min(w/k-i, 2^k-1-i)), i∈[0, min(2^k-1, w/k)) }
解释:如果 w 能整除 k,那么枚举长度。我们知道 2^k-1 是 2^k 进制数一位上能达到的最大值,也是一个(无其他限制情况下)递增的 2^k进制数的最大位数。所以 min(w/k, 2^k-1) 就是当前情况下所能达到的最大位数。
- 若 w mod k > 0,先做完上面的步骤,然后单独统计多出来的「不完整的」一位。在这种情况下,如果存在位数为 w div k + 1 的情况,第一位可以并不能取遍 1~2^k-1,而只能取 1~2^(w mod k)-1. 将这些值累加即可。
并不是对于所有的情况都要判断该情况是否可能出现,因为有些不可能的情况的 f 值并没有计算过,是等于 0 的。比如当 k=2, w=6 时,f(1, 3) 很明显是等于 0 的,所以即使将其累加也不影响最终结果。
noip2006提高组题解的更多相关文章
- noip2010提高组题解
NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- NOIP 2001 提高组 题解
NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...
- NOIP 2000 提高组 题解
NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...
- 【NOIP2018】提高组题解
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕
- [NOIP2006] 提高组 洛谷P1066 2^k进制数
题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...
- [NOIP2006] 提高组 洛谷P1064 金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
- [NOIP2006] 提高组 洛谷P1063 能量项链
题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...
- [NOIP2006] 提高组 洛谷P1065 作业调度方案
题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...
随机推荐
- IE6兼容inline-block的方法
或许有朋友会对IE不支持 display:inline-block 属性,表示疑问或者反对.说:“我在 IE 中对 a 或者 span 等内联元素使用 display:inline-block 一直是 ...
- 物理地址 = 段地址*10H + 偏移地址
程序如何执行: CPU先找到程序在内存中的入口地址 -- 地址总线 (8086有20根地址总线,每一根可以某一时传0或1, 20位的二进制数字可以表示的不同的数字的个数是2^20=1048576 10 ...
- iscsi 操作备忘
#查找iscsi节点 iscsiadm -m discovery -t st -p 192.168.20.225 #列出可用节点 iscsiadm -m node -T iqn.com.exapmle ...
- 【面试题002】java实现的单例模式,c++实现单例模式,实现禁止拷贝
[面试题002]java实现的单例模式,c++实现单例模式,实现禁止拷贝 一 c++实现单例模式 保证一个类,在一个程序当中只有一个对象,只有一个实例,这个对象要禁止拷贝,注意这里要区别于java. ...
- javascript 比较
javascript中由于是弱类型,所以在比较的时候有较大的麻烦.这次专门做了总结: Comparison Operators Comparison operators are used in log ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- 2013 Multi-University Training Contest 1 3-idiots
解题报告: 记录 A_i 为长度为 i 的树枝的数量,并让 A 对它本身做 FFT,得到任意选两个树枝能得到的各个和的数量.枚举第三边, 计算出所有两边之和大于第三条边的方案数,并把前两条边包含最长边 ...
- 利用Nginx搭建http和rtmp协议的流媒体服务器
http://www.linuxidc.com/Linux/2013-02/79118.htm
- [OOD]违反里氏替换原则的解决方案
关于OOD中的里氏替换原则,大家耳熟能祥了,不再展开,可以参考设计模式的六大设计原则之里氏替换原则.这里尝试讨论常常违反的两种形式和解决方案. 违反里氏替换原则的根源是对子类及父类关系不明确.我们在设 ...
- 如何发布使用LGPL版Qt的商业软件
最近做跨平台图形用户界面库选型,权衡很多因素后最终选择了Qt,其中一个重要因素就是Qt使用LGPL授权许可.由于本人对LGPL理解有限,始终对闭源商业软件如何发布Qt库存在疑问,其中最关心的是:发布的 ...