摘要: 第一题:笨小猴模拟第二题:火柴棒等式搜索深搜不用说,确定出两个加数然后判断能否拼出等式。枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解。不过这题的数据貌似很温和,我从 0~1000 枚举也能过。第三题:传纸条多线程动态规划跟 2000 年的方格取数很像。还是看做两个人同时从左上角走到右下角。用 f(i, j, k) 表示横纵坐标和为 i,第一个人的行坐标为 j,第二个人的... 阅读全文
posted @ 2014-08-29 22:01 lsdsjy 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 题外话:这一年的noip应该是最受大众关心的,以至于在百度上输入noip第三个关键字就是noip2007。主要是由于这篇文章:http://www.zhihu.com/question/21107274/answer/18452037 第一题:统计数字排序/平衡二叉树受上面这篇文章的影响,我没有用快排,而是用了STL的multiset的count函数来统计出现次数。但事实证明STL的sort足以... 阅读全文
posted @ 2014-08-29 20:56 lsdsjy 阅读(330) 评论(2) 推荐(1) 编辑
摘要: 第一题:能量项链 区间型动态规划 据说这题在当年坑了很多人。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 0,先做完上面的步骤,然... 阅读全文
posted @ 2014-08-28 22:32 lsdsjy 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 埃及分数迭代加深搜索题意:将一个分数拆分成几个分子为 1 的分数的和。要求拆分出的个数最少。正解:据说是黑书上的题目。思路很明确,用 ID-DFS 每次限定深度进行搜索即可。为了使序列不重复,每次找到的分数都要比前一个分数小,即分母比前一个分数的分母大。同时要保证当前的分数加上之前的分数之和不大于题目给出的分数。这样我们就确定了每层搜索枚举的上下界。最终判断枚举出的分数序列是否满足要求时只要进行通... 阅读全文
posted @ 2014-08-26 20:50 lsdsjy 阅读(198) 评论(0) 推荐(1) 编辑
摘要: 奶牛选举搜索题意:在 5*5 的矩阵中找出规模为 7 的四连通块的个数。初步解法:枚举第一个被取的格子是哪个。对于每个格子,若其上下左右四个格子已经有被取过的格子,就枚举其取或不取;否则不取当前格子。但是很明显是错的,因为在初始格子的周围添加一个后,能够取的格子就会变多,但是由于是顺序枚举,就会漏掉前面的可以取的格子。正解:直接把上面的方法中「判断其四周是否有被取过的格子」这一步删掉。更好的解法是... 阅读全文
posted @ 2014-08-25 23:29 lsdsjy 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 【问题描述】设 2n 张牌分别标记为 1, 2, ..., n, n+1, ..., 2n,初始时这 2n 张牌按其标号从小到大排列。经一次洗牌后,原来的排列顺序变成 n+1, 1, n+2, 2, ..., 2n, n。即前 n 张牌被放到偶数位置 2, 4, ..., 2n,而后 n 张牌被放到... 阅读全文
posted @ 2014-08-23 17:47 lsdsjy 阅读(874) 评论(2) 推荐(1) 编辑
摘要: 选些最近做的题目写写。选择物品动态规划题意:有 N 种物品,每种有 a(i) 件,问有多少种不同的取法?例如,AB 和 BB 是两种不同的取法。初步解法:搜索,对于每一件物品,枚举取 0、1、2、...、a(i) 件时的情况,在弱数据下可以拿 80% 的分数。正解:从上面的搜索思路其实就能找到动规方法了。用 f(i, j) 表示在前 i 种物品中取 j 件的方案数,则f(i, j) = sum{... 阅读全文
posted @ 2014-08-22 23:13 lsdsjy 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 定义: 若 $a\cdot{k}\equiv 1\pmod{p}, a \perp p$,就说 $k$ 是 $a$ 模 $p$ 的乘法逆元. 记为 $k = a^{-1}$.我个人习惯用 $ie(a)$ 表示 $a$ 模某数的逆元. ($inverse$ $element$)性质: $\frac{a... 阅读全文
posted @ 2014-08-20 21:04 lsdsjy 阅读(356) 评论(0) 推荐(1) 编辑
摘要: two模拟大意:给你一个 N 位二进制数,有四种操作:加1、减1、乘2、整除2。给定一个操作序列,求最终结果。N <= 5*10^6。数据保证不会在最高位上进行进位或退位操作。初步解法:由于题目中的特殊限制(操作不影响最高位),我们可以直接用一个 char 数组和一个尾指针来进行操作。「加1」操作即从最后一位往前找连续的 1 并将其改成 0,然后将遇到的第一个 0 改成 1,并结束循环。「减1」操... 阅读全文
posted @ 2014-08-19 21:18 lsdsjy 阅读(196) 评论(0) 推荐(0) 编辑
摘要: (有关矩阵乘法的基本规则请自行搜索) 引例:求斐波那契数列的第 n 项 mod 1000000007 的值,n <= 1018。 分析:斐波那契数列的递推式为 f(n) = f(n-1)+f(n-2),直接循环求出 f(n) 的时间复杂度是 O(n),对于题目中的数据范围显然无法承受。很明显我们需要对数级别的算法。 由于 f(n) = 1*f(n-1) + 1*f(n-2) 这样的形式... 阅读全文
posted @ 2014-08-19 21:16 lsdsjy 阅读(794) 评论(0) 推荐(0) 编辑