折半枚举(双向搜索)
摘要:
1. 从 4 个数列中选择的话总共有 n4 种情况,所以全都判断一遍不可行。不过将它们对半分成 AB 和 CD 再考虑,就可以快速解决了。从两个数列中选择的话只有 n2 种组合,所以可以进行枚举。先从 A、B中取出 a、b 后,为了使总和为 0 则需要从 C、D中取出 c + d = - a - b
弹性碰撞
摘要:
首先考虑一下只有一个球的情况。这时只是单纯的物理问题。从高为 H 的位置下落的话需要花费的时间是,这样的话,在 T 时刻,令 k 为满足 kt ≤ T 的最大整数,那么 接下来考虑多个球的情况。乍一看,因为多个球之间会有碰撞,必须对物理运动进行模拟,事实上没有这个必要。回忆一下一个题目 “ Ants
集合的整数表示
摘要:
在反转那篇文章中,为了尝试第一行的所有可能性,使用了集合的整数表现。在程序中表示集合的方法有很多种,当元素数比较少时,像这样用二进制码表示比较方便。集合{0, 1, ..., n-1} 的子集 S 可以用如下的方式编码成整数。 像这样表示之后,一些集合运算可以对应地写成如下方式。 (1) 空集Ø >
反转(开关问题)
摘要:
1. 对于一个特定的 K 如何求出让所有牛面朝前方的最小操作数。如果把牛的方向作为状态进行搜索的话,由于状态数有 2N 个,是无法在时限内得出答案的。 首先,交换区间反转的顺序对结果是没有影响的。此外,对同一区间进行两次以上的反转是多余的。由此,问题就转化成了求需要被反转区间的集合。先考虑一下最左端
尺取法
摘要:
尺取法通常是指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点直到得出答案的方法。 1. 由于所有的元素都大于零,如果子序列 [s, t] 满足 as + .... at ≥ S,那么对于任何的 t < t' 一定有 as + .... at‘-1 ≥ S。 此外对于区间[ s,
floor函数用法
摘要:
floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值)。 floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取
二分搜索
摘要:
二分搜索法是通过不断缩小可能存在的范围,从而求得问题最优解的方法。 1. 从有序数组中查找某个值 给定长度为 n 的单调非递减数列 a0......an,和一个数 k,求满足 ai ≥ k 条件的最小的 i,不存在的情况下输出n。 求满足某个条件C(x)的最小的 x 这一问题。对于任意满足C(x)
4. 差分约束系统
摘要:
1.定义: 如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。 求解差分约束系统,可以转化成
二叉树的表达式求值
摘要:
问题描述: 输入一个表达式(表达式中的数均为小于10的正整数),利用二叉树来表示该表达数,创建表达式树,然后利用二叉树的遍历操作求表达式的值。 输入要求: 多组数据,每组一行,以‘=’结尾。当输入只有一个‘=’时, 输入结束。 输出要求: 每组数据输出一行为表达式的值。 样例: 输入样例: 1+2-
3. 最小生成树
摘要:
1. 什么是最小生成树 给定一个无向图,如果它的某个子图中任意两个顶点都相互连通并且是一颗树,那么这棵树称为生成树 (Spanning Tree)。如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST, Minimum Spanning Tree). 一个有 n 个结点的连通图的生成树是