procedure2012
It's not worth it to know you're not worth it!

随笔分类 -  NDK

各种BDEZ集训题目
[Tyvj1565 守望者的烦恼]
摘要:[题目来源]:tyvj1565[关键字]:递推 矩阵乘法[题目大意]:守望者一次可以移动1到k步,问她走到第n个格有多少种走法(mod 7777777)。//=====================================================================================================[分析]:首先由推出方程,和费波纳契数列很像:f[i]=f[i-1]+f[i-2]+.......+f[i-k]。但是问题是数据范围很大,单纯循环肯定超时,这时要用矩阵加速。[代码]:View Code 1 var 2 n, k: l... 阅读全文
posted @ 2011-11-04 23:15 procedure2012 阅读(224) 评论(0) 推荐(0)
[NDK 安置诸侯]
摘要:[题目来源]:2011/11/04模拟赛[关键字]:递推[题目大意]:在一个类似菱形的地图里放置诸侯,保证每一行每一列都只有一个诸侯。//=====================================================================================================[分析]:先把地图转化成,再用递推。可以很容易的求出方程:f[i,j]=∑f[k,j-1]*(l[i]-(j-1))其中f[i,j]为前i列放j个,l[i]是第i列有多少个。[代码]:View Code 1 {$i-,s-,q-,r-} 2 var 3 ... 阅读全文
posted @ 2011-11-04 23:05 procedure2012 阅读(162) 评论(0) 推荐(0)
[NDK 优化多重背包]
摘要:单调队列优化多重背包(转自:http://hi.baidu.com/lydrainbowcat/blog/item/d9fb791fc48ae1e0e0fe0bab.html) 多重背包仅涉及体积而不涉及价值的一类可以使用染色在O(nv)时间、20行左右秒过,然而对于涉及价值的多重背包,则要使用二进制拆分物品优化,或者使用效率更高应用更广的单调队列(O(nv))。 若有n种物品,背包容量为m,物品体积、价值、最大使用次数为v,w,c,则朴素的动规方程为:f[i]=max{f[i-v*k]+w*k} (1<=k<=c)。我们把所有可能达到的体积按照除以当前物品体积v的余数划分为0~v 阅读全文
posted @ 2011-11-01 23:16 procedure2012 阅读(717) 评论(0) 推荐(0)
[NDK 十字绣]
摘要:[题目来源]:NOIP基础题集[关键字]:图论 连通性[题目大意]:十字绣一针只能正反交错进行,问对于给定图案至少需要多少针。//=====================================================================================================[分析]:首先将图划分成不同的连通块,每一块至少要用一针,所以只要计算每个块内要用几针再相加。将正面的连线看作正边,反面的为负边。因为对于每一个点,如果有一条正边则代表正面有一条线,有一条负边则代表反面有一条线,而正负边之差,就是以此点位开始的线的数量,而这样的线必定 阅读全文
posted @ 2011-11-01 20:42 procedure2012 阅读(172) 评论(0) 推荐(0)
[NDK 数字游戏]
摘要:[题目来源]:NOIP2003普及组[关键字]:动态规划[题目大意]:将一个n个数字组成的环分成m份,使每份之和对10取模后相乘的积最大或最小。//======================================================================[分析]:类似于石子合并的动态规划,解法比较暴力(n<=50 m<=9)。枚举每一个点,以此为起点将环断开,然后f[i,j]为以枚举断链的点开始前i个分成j组的最大(最小值),f[i,j]=f[k,j-1]*sum[k+1,i],具体i,j,k所代表的含义有点不同,结合代码再仔细看吧。[代码]:Vi 阅读全文
posted @ 2011-10-31 20:25 procedure2012 阅读(263) 评论(0) 推荐(0)
[NDK 麦森数]
摘要:[题目来源]:NOIP2004[关键字]:数学[题目大意]:求2p-1的位数,和后500位。//======================================================================[分析]:求位数可以用数学方法求:N的位数=log10(N),所以2p-1的位数=log10(2p-1)=p*log10(2)。第二问要用高精度求出后500位就行,但是要用快速幂。[代码]:无第一问View Code 1 program Project1; 2 const up = 10000; 3 type 4 rec = record 5 ... 阅读全文
posted @ 2011-10-31 17:46 procedure2012 阅读(296) 评论(0) 推荐(2)
[NDK 双栈排序]
摘要:[题目来源]:NOIP2004[关键字]:二分图[题目大意]:判断是否能用两个栈将给定的序列排列成升序,如果能则输出操作序列。//======================================================================[分析]:易证对于i<j如果存在k,使i<j<k且a[k]<a[i]<a[j]则i和j必定不能在同一个栈里,所以将他们连一条无向边。然后就是利用染色法判断是否是一个二分图。染色时吧标号小的放进栈1就能得出字典序小的操作序列。[代码]:View Code 1 var 2 a, b: array[0.. 阅读全文
posted @ 2011-10-31 17:29 procedure2012 阅读(283) 评论(0) 推荐(0)
[NDK 球迷购票]
摘要:[题目来源]:NOIP基础题目集[关键字]:数学[题目大意]:m个人拿50的去买票,n个人拿100的去买票,问有多少种能使钱找开的方案。//============================================================================================================[分析]:祥见《程序设计中的组合数学》P43页。此时若n = m则为Catalan数。[代码]:View Code 1 type 2 rec = record 3 len: longint; 4 dat: arra... 阅读全文
posted @ 2011-10-29 18:02 procedure2012 阅读(162) 评论(0) 推荐(0)
[NDK 百事世界杯之旅]
摘要:[题目来源]:NOIP基础题目集[关键字]:数学[题目大意]:每个瓶盖上有一个球星的名字,有N个不同的球星,平均情况下,要买多少瓶饮料才能集齐所有名字。//===========================================================================================================[分析]:对于要在剩下的 i 种瓶盖中收集到一种,买一瓶饮料收集到的概率为(i/n),所以平均应该买(n/i)瓶,所以平均总共要买 n(1/1+1/2+1/3+….+1/n)瓶。[代码]:View Code 1 program . 阅读全文
posted @ 2011-10-29 17:27 procedure2012 阅读(293) 评论(0) 推荐(0)
[NDK 出栈序列统计]
摘要:[题目来源]:NOIP基础题目集[关键字]:数学[题目大意]:求出n个数的出栈序列数目//===========================================================================================================[分析]:n个数的出栈序列数目就是一颗有n个节点的二叉树的数量。因为他的进栈序列就是该二叉树的先序遍历,而它的出栈序列就是该二叉树的中序遍历,所以两者都等于Catalan数公式为:C(2n,n)/(n+1)。因为当n稍微大一点时结果就会很大,所以要用高精度,为了避免高精除法,可以先将把分子和分母 阅读全文
posted @ 2011-10-29 17:05 procedure2012 阅读(368) 评论(0) 推荐(0)
[NDK 最优分解方案]
摘要:[题目来源]:NOIP基础程序题集[关键字]:数学[题目大意]:给定整数N,将其分解为若干个互不相同的整数,是他们的乘积最大//============================================================================================================[分析]:为了使最后分解的数的乘积最大,首先我们应该确定 n 应该分解为几个数(其实就是 n可以分出的最多个数),确定过程就是从 2开始以步差为 1累加,直到恰好小于 n位置(就是找最大数为k,使 2+3+…+k=t<n,划分成的个数应该为 k+1) 阅读全文
posted @ 2011-10-29 16:56 procedure2012 阅读(310) 评论(0) 推荐(0)
[NDK 求无向图的割点和桥]
摘要:求割顶割顶是去掉后让无向图不再连通的点。 求割顶的算法在DFS遍历的算法上形成。什么样的点是割顶?在一棵DFS树中,1.根root是割顶 ------------- 它至少有两个儿子2.其他点v是割顶 ------------- 它有一个儿子u, 从u或者u的后代出发没有指向v祖先(不含v)的B边, 则删除v以后u和v的父亲不连通, 故为割顶。割顶判定算法:引入lowlink数组为 从当前点以及它的后代所能到达的点的开始访问时间的最小值。 Lowlink [u]= Min { pre[u] Pre[v] (u,v)是后向边 Lowlink [v] (u,v)是树边,u在dfs树中是v的父亲 } 阅读全文
posted @ 2011-10-27 11:46 procedure2012 阅读(1772) 评论(1) 推荐(0)
[NDK 一笔画问题]
摘要:[题目来源]:《全国青少年信息学奥林匹克联赛培训教材》(粉书)[关键字]:欧拉路径(回路)[题目大意]:给出一个图G问,是否存在一条欧拉路径(回路),若有则输出字典序最小的解。//============================================================================================================[分析]:1、如果图中奇数度的点只有0或2个则存在,0时从任意点有一条回路,2是从任意奇数度的点有一条以另一个奇数度的点为汇点的路径。2、求欧拉路径时递规求解,倒着记录路径。[代码]:View Code 阅读全文
posted @ 2011-10-27 11:42 procedure2012 阅读(258) 评论(0) 推荐(0)
[NDK 佳佳的魔法药水]
摘要:【题目】:佳佳的魔法药水【来源】:NDK【关键字】:图论 构图//================================================================================================【分析】:和最优贸易类似,都是转换成图,由最短路来做.只不过这里的边实际是指向合成的魔药.只有更新部分有些区别.【小结】:一类题的做法//================================================================================================【代码】:V 阅读全文
posted @ 2011-10-20 01:29 procedure2012 阅读(386) 评论(0) 推荐(0)