随笔分类 -  Recommend

摘要:题意:有3种动物A、B、C,形成一个“A吃B, B吃C,C吃A ”的食物链。有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类。;第二种说法是"2 X Y",表示X吃Y。假设输入为(d,X,Y)。可知,当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 阅读全文
posted @ 2016-11-04 14:46 konjac蒟蒻 阅读(788) 评论(0) 推荐(0)
摘要:题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账。 解法:带权并查集+前缀和。 判断账本真假是通过之前可算到的答案与当前读入的值是否相同来完成。那么就是只有知道新读入的区间2端的(在相同区域内的!!)前缀和才可以判断,也就是这2个端点之 阅读全文
posted @ 2016-11-04 08:59 konjac蒟蒻 阅读(523) 评论(0) 推荐(0)
摘要:题意:有N个方块,M个操作{“C x”:查询方块x上的方块数;“M x y”:移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}。输出相应的答案。 解法:带权并查集。每堆方块作为一个集合,维护3个数组:fa[x]表示x方块所在堆的最顶部的方块;d[x]表示x方块所在堆的最底部的方块;f[x]表 阅读全文
posted @ 2016-11-02 22:13 konjac蒟蒻 阅读(416) 评论(0) 推荐(0)
摘要:题意:平面上有N个点(1≤N≤1000),若要新建边,费用是2点的欧几里德距离的平方。另外还有Q个套餐,每个套餐里的点互相联通,总费用为Ci。问让所有N个点连通的最小费用。(2组数据的输出之间要求有换行) 解法:利用二进制枚举套餐,时间复杂度是O(2QN2+N2logN)。关于时间复杂度,枚举:二进 阅读全文
posted @ 2016-11-02 08:37 konjac蒟蒻 阅读(740) 评论(0) 推荐(0)
摘要:题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案。 解法:由于是连续的数的“最大值最小”,便可想到二分每段的最大值,若这时可分成<=K段,则这个最大值成立,再继续二分。 输出方案需要用到贪心策略, 先从后往前贪心求得最小划分的段数M,若M不足K, 阅读全文
posted @ 2016-10-31 22:22 konjac蒟蒻 阅读(276) 评论(0) 推荐(0)
摘要:题意:问一个给定正整数的分解因数的方式数。N=a1*a2*...*ak(a1<=a2<=...<=ak)。 解法:一步步分解该数,总方式数为一个个因数被分解的方案数之和。 可用大括号表示,也可想象成一棵树[分层构造],每个节点为不同的因数分解方式。(结构图凑合着看吧.....) N= X={u*v, 阅读全文
posted @ 2016-10-31 17:08 konjac蒟蒻 阅读(2093) 评论(0) 推荐(0)
摘要:题意:给3个数M,A,B,求两个质数P,Q。使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大。输入若干行以0,0,0结尾。 解法:先线性筛出素数表,再枚举出P,二分出对应的最大的Q,得出最佳答案。 注意——1.第二个的代码是标准的欧拉筛,可求每个数的最小质因数; 2. 像第一个代码二分时 阅读全文
posted @ 2016-10-30 18:50 konjac蒟蒻 阅读(418) 评论(0) 推荐(0)
摘要:P.S.o(︶︿︶)o 唉~虽然这题方程不难,但题目长,代码长,我花了超过3小时!(>﹏<)悲伤辣么大~~~ 谨此题解惠及众人,hh。 题意:给定长度为M的一串颜色序列,和平面上的N个颜色隧道。要求以颜色序列的顺序通过颜色隧道。(隧道可多次使用,可交叉,互不相同。)问从源点到汇点依次通过颜色的最小距 阅读全文
posted @ 2016-10-28 11:02 konjac蒟蒻 阅读(643) 评论(0) 推荐(0)
摘要:题意:若干组数据,分别问 N划分成K个正整数之和的划分数目、N划分成若干个不同正整数之和的划分数目、N划分成若干个奇正整数之和的划分数目。 解法:请见我之前的一篇博文内的Article 2——【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法} http://www.cnblo 阅读全文
posted @ 2016-10-27 17:00 konjac蒟蒻 阅读(594) 评论(0) 推荐(0)
摘要:题意:有M个家族的蚂蚁,各Ni只(互相相同)。问选出 l~r 只的不同方案数。 解法:很基础的一种DP,不要被“排列组合”所迷惑了啊~我之前接触过这个类型,可惜又忘了,一定要记住!这是一种类型的DP——M种N个进行DP,定义f[i][j]表示前 i 种中(这题是“家族”)选了 j 个(“只”蚂蚁)的 阅读全文
posted @ 2016-10-27 11:56 konjac蒟蒻 阅读(677) 评论(2) 推荐(0)
摘要:题意:N个编号为1~N的数,选任意个数分入任意个盒子内(盒子互不相同)的不同排列组合数。 解法:综合排列组合 Stirling(斯特林)数的知识进行DP。C[i][j]表示组合,从i个数中选j个数的方案数;S[i][j]表示Stirling数,i个数分成j份的方案数;P[i]表示P(i,i)全排列。 阅读全文
posted @ 2016-10-27 10:24 konjac蒟蒻 阅读(422) 评论(0) 推荐(0)
摘要:题意:有m个人有一张50元的纸币,n个人有一张100元的纸币。他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数。 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变形。(推荐阅读:http://www.cnblogs.com/chenhuan001/p/51571 阅读全文
posted @ 2016-10-26 21:55 konjac蒟蒻 阅读(549) 评论(0) 推荐(0)
摘要:题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树。问深度为d的严格n元树数目。 解法:f[i]表示深度为<=i的严格n元树数目。f[i]-f[i-1]表示深度为i的严格n元树数目。f[i]=f[i-1]^n+1。d层的严格n元树可分解为1个根节点和n棵d-1层的严格n元树。利用乘法原理,再 阅读全文
posted @ 2016-10-26 09:01 konjac蒟蒻 阅读(560) 评论(0) 推荐(1)
摘要:题意:一共有N只牡牛(公牛)和牝牛(母牛),每2只牡牛间至少要有K只牝牛才不会斗殴。问无斗殴发生的方案数。 解法:f[i][j]表示一共i只牛,最后一只是j(0为牝牛,1为牡牛)的方案数。f[i][0]=f[i-1][1]+f[i-1][0]; f[i][1]=f[i-k-1][1]+f[i-k-1 阅读全文
posted @ 2016-10-17 14:03 konjac蒟蒻 阅读(307) 评论(0) 推荐(0)
摘要:题意:问长度为L的所有01串中,有多少个不包含"101"和"111"的串。 解法:f[i][j]表示长度为i的01串中,结尾2位的十进制数是j的合法串的个数。那么,便由f[i-1][ ]逐个推出。 1 #include<cstdio> 2 #include<cstdlib> 3 #include<c 阅读全文
posted @ 2016-10-17 08:12 konjac蒟蒻 阅读(419) 评论(0) 推荐(0)
摘要:题意:n个数中不能同时选连续m个或以上,问方案数。 解法:f[i][j]表示从前i个中选,到第i个已经连续选了j个。j!=0时, =f[i-1][j-1] ; j=0时, =f[i-1][0~m-1] ; 优化1:f[i][m]存f[i-1][0~m-1],就不用多for一重。 1 #include 阅读全文
posted @ 2016-10-14 20:21 konjac蒟蒻 阅读(467) 评论(0) 推荐(0)
摘要:题意:从自然数1到N中不取相邻2数地取走任意个数,问方案数。 解法:f[i][1]表示在前i个数中选了第i个的方案数,f[i][0]表示没有选第i个。f[i][1]=f[i-1][0]; f[i][0]=f[i-1][1]+f[i-1][0] 而若简化方程式,用f[i]表示从前i个中取数的方案数。便 阅读全文
posted @ 2016-10-14 14:33 konjac蒟蒻 阅读(429) 评论(0) 推荐(0)
摘要:由于noi OJ上没有Special Judge,所以我是没有在这上面AC的。但是在POJ上A了。 题意如标题。 解法:f[i][j]表示a串前i个和b串前j个且包含b[j]的最长公共上升子序列长度 首先,可用3重循环得到,k循环找到b串j之前的最大长度子序列的结尾字符b[k],得以更新现在f[i] 阅读全文
posted @ 2016-10-13 22:20 konjac蒟蒻 阅读(757) 评论(0) 推荐(0)
摘要:题意:N*N的方格图每格有一个数值,要求从左上角每步往右或往下走到右下角,问走2次的最大和。 解法:走一次的很好想,而走2次,不可误以为先找到最大和的路,再找剩下的最大和的路就是正解。而应该认清动态规划的实质,定义为最佳解的状态,因此要走的2次都要涵括。 O(n^4)——f[i][j][k][l]表 阅读全文
posted @ 2016-10-12 21:50 konjac蒟蒻 阅读(788) 评论(0) 推荐(0)
摘要:题意:问把整数N分成K份的分法数。(与“放苹果”不同,在这题不可以有一份为空,但可以类比)解法:f[i][j]表示把i分成j份的方案数。f[i][j]=f[i-1][j-1](新开一份,放1)而i≥j时,f[i][j]=f[i-1][j-1] +f[i-j][j](不新开一份时的方案数与每份中都少放 阅读全文
posted @ 2016-10-11 21:49 konjac蒟蒻 阅读(2142) 评论(0) 推荐(0)