第一题:能量项链

区间型动态规划

据说这题在当年坑了很多人。

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提高组题解的更多相关文章

  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. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  7. [NOIP2006] 提高组 洛谷P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  8. [NOIP2006] 提高组 洛谷P1063 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  9. [NOIP2006] 提高组 洛谷P1065 作业调度方案

    题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...

随机推荐

  1. HTML特殊转义字符对照表

    字符 十进制 转义字符 字符 十进制 转义字符 字符 十进制 转义字符 ? ¡ ¡ Á Á Á á á á ¢ ¢ ¢ Â Â ˆ â â £ £ £ Ã Ã Ã ã ã ã ¤ ¤ ¤ Ä Ä &a ...

  2. NC保存报dirty解决方法

    在NC UI端测试保存的时候报  " The data whose initcode is 6033 is dirty! " 错误,其解决方式是 在IHrPf接口中添加你的单据模板编号 和 参数模板 ...

  3. Machine Learning Done Wrong

    Machine Learning Done Wrong Statistical modeling is a lot like engineering. In engineering, there ar ...

  4. Unity3D脚本中文系列教程(二)

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014030347910/ Unity3D脚本中文系列教程(一) .根据名称或标签定 ...

  5. 理解lua 语言中的点、冒号与self

    转载自: http://blog.csdn.net/wangbin_jxust/article/details/12170233 lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号 ...

  6. poj 2485 Highways(最小生成树,基础,最大边权)

    题目 //听说听木看懂之后,数据很水,我看看能不能水过 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stri ...

  7. Javascript通过className选择元素

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. Android 调节当前Activity的屏幕亮度

    调节的关键代码: WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.screenB ...

  9. lintcode :最长上升连续子序列

    题目: 最长上升连续子序列 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列.(最长上升连续子序列可以定义为从右到左或从左到右的序列.) 样例 ...

  10. import java.util.Scanner;

    一.扫描控制台输入     当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,,,,,,,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象 ...