摘要: 经典问题的非经典解法N皇后问题 主要来源:Matrix67这是一道行列式计算的经典例题,历史悠久,喜闻乐见。一个十分简单的,并且没有多少限制的是镜像优化,可以减少一半的搜索量,我记得没错USACO那道朴素算法再加这个优化就能A了。然后就有不少神牛提出了许多高深的优化方法。比如最后一个直接确定,无需再搜。比如链表,减少了对无用位置的检查,只是删除和还原时比较烦。【我会告诉其实我至今不会链表吗】比如改为非递归,但是代码量。。。不敢恭维。非经典解法之位运算我们可以记录三个状态S1,S2,S3 表示当前每行中、两条对角线上哪些位置分别被占。然后位运算牛就牛在我们可以O(1)算出某个数最右边的1 在哪里 阅读全文
posted @ 2012-10-22 21:09 FancyCoder0 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 给定一棵树,求出分别以每个点为根的树的深度。其实这道题是四五月份时宁波初中比赛时的题目,当时的数据范围自然是1000,然后O(n^2)水过。当时比赛时题做完了,闲的无聊,打算想一想O(n)做法,当时也感觉挺可做的。几个月后突然想起来,今天就写了一下。算是一道树形dp吧。这题描述简单,做法也算有趣,自己感觉是个有意思的问题。解答也一句话,意会即可:每个点的深度=MAX(每个点向下的最长路,每个点向上的最长路);每个点向下的最长路=MAX(子树的向下的最长路)+1;每个点向上的最长路=MAX(父亲向上的最长路+1,父亲向下的次长路+1)【当这个点是父亲最大的儿子时】, 父亲的深度+1【当这个点不是 阅读全文
posted @ 2012-09-10 19:15 FancyCoder0 阅读(879) 评论(0) 推荐(0) 编辑
摘要: 给定G和N。求mod P(P=999911659)。就是一道赤裸裸的数论题拉。在cxms众牛的激烈讨论下,最终没有做出本题。其实,我们只是差了一步。从头来。显然P是一个质数。利用循环节性质和欧拉函数性质可以得出答案即为。如果我们已知,则我们可以利用快速幂在时间内求出答案。现在问题聚焦到求解上。由于N的所有约数可以利用枚举约数方法在时间内求得,所以问题的关键即是求解。(然后到这里我们都无力了。)Lucas定理和欧拉-费马定理能在时间内解决这个关键问题。但是,必须满足模数是质数!怎么办?怎么办?怎么办?然后很自然的就想到了质因数分解按每个质因数求解答案后利用线性模方程组的扩展GCD或中国剩余定理方 阅读全文
posted @ 2012-05-19 22:01 FancyCoder0 阅读(620) 评论(0) 推荐(1) 编辑
摘要: 问题概述:共有N个K元组(x1,x2,x3…xk),一个K元组最大,当且仅当没有一个K元组每个xi都比它大。求最大K元组。一般地,为了问题更加简洁,每个xi都为小于等于N的正整数,K看为较小的常数。朴素算法无论K等于几,均可在至多O(n^2)时间内解决。当K=1时,O(n)查找。 相关题目:不解释当K=2时,O(n)双关键字基数排序。 相关题目:NBOI2011牛人(xi任意,快排即可)当K=3时,O(nlogn)线段树。 相关题目:空心长方体当K=4时,O(nlognlogn)树套树。 相关题目:东方幻想乡模拟赛第5场yousei当K=5时,O(nlognlognlogn)树套树套树。当K= 阅读全文
posted @ 2012-03-08 19:58 FancyCoder0 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 【题目分析】一条直线上给定相对距离Di(距第一个村庄的距离)的N个村庄中建K个基站,每个村庄i接收的范围为前后Si,建基站费用Ci,一个村庄要么被接受到要么额外支付Wi。设计方案求最小总费用。【算法分析】朴素方程为f[i][j](前i个村庄中选j个基站,第j个建在i)=MIN(f[k][j-1]+W[k+1..j](表示k+1..j村庄中建一个基站后覆盖所有k+1..j(没覆盖就支付费用)所需的最小总和)).W预处理需要N^3时间,DP需要N^2*K的时间。显然需要优化。其实这样一个“裸”的方程看起来似乎很难再在时间上优化下去,因为该算法的瓶颈在于预处理的“复杂”(预处理涉及到题中的C、S、W 阅读全文
posted @ 2012-03-08 19:24 FancyCoder0 阅读(568) 评论(0) 推荐(0) 编辑