10 2016 档案
摘要:题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案。 解法:由于是连续的数的“最大值最小”,便可想到二分每段的最大值,若这时可分成<=K段,则这个最大值成立,再继续二分。 输出方案需要用到贪心策略, 先从后往前贪心求得最小划分的段数M,若M不足K,
阅读全文
摘要:题意:将正整数N用2的幂次方表示(彻底分解至2(0),2)。 解法:将层次间和每层的操作理清楚,母问题分成子问题就简单了。但说得容易,操作没那么容易,我就打得挺纠结的......下面附上2个代码,都借用了数组储存,而代码2是我近期打的,应该是更优美一点的。 1 #include<cstdio> 2
阅读全文
摘要:题意:问一个给定正整数的分解因数的方式数。N=a1*a2*...*ak(a1<=a2<=...<=ak)。 解法:一步步分解该数,总方式数为一个个因数被分解的方案数之和。 可用大括号表示,也可想象成一棵树[分层构造],每个节点为不同的因数分解方式。(结构图凑合着看吧.....) N= X={u*v,
阅读全文
摘要:题意:给3个数M,A,B,求两个质数P,Q。使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大。输入若干行以0,0,0结尾。 解法:先线性筛出素数表,再枚举出P,二分出对应的最大的Q,得出最佳答案。 注意——1.第二个的代码是标准的欧拉筛,可求每个数的最小质因数; 2. 像第一个代码二分时
阅读全文
摘要:P.S.o(︶︿︶)o 唉~虽然这题方程不难,但题目长,代码长,我花了超过3小时!(>﹏<)悲伤辣么大~~~ 谨此题解惠及众人,hh。 题意:给定长度为M的一串颜色序列,和平面上的N个颜色隧道。要求以颜色序列的顺序通过颜色隧道。(隧道可多次使用,可交叉,互不相同。)问从源点到汇点依次通过颜色的最小距
阅读全文
摘要:题意:给定一个队列延迟值为Di的任务,以任意顺序入栈和出栈,第K个出栈的延迟值为(K-1)*Di。问最小的延迟值。 解法:f[i][l]表示完成以第i个任务开始,长度为l,到第i+l-1个任务的最小延迟值。设其中的第j个任务为最后一个出栈的,则f[i][j-i]为先出栈的延迟值,f[j+1][i+l
阅读全文
摘要:题意:若干组数据,分别问 N划分成K个正整数之和的划分数目、N划分成若干个不同正整数之和的划分数目、N划分成若干个奇正整数之和的划分数目。 解法:请见我之前的一篇博文内的Article 2——【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法} http://www.cnblo
阅读全文
摘要:题意:问正整数n的所有划分个数。 解法:f[i][j]表示划分 i 后的每个数不大于 j 的划分数。分情况讨论:划分中每个数都小于 j,相当于每个数不大于 j- 1, 故划分数为 f[i][j-1] 或 划分中至少有一个数为 j. 相当于把剩下的 i-j 进行划分,每个数不大于j, 划分数为 f[i
阅读全文
摘要:题意:有M个家族的蚂蚁,各Ni只(互相相同)。问选出 l~r 只的不同方案数。 解法:很基础的一种DP,不要被“排列组合”所迷惑了啊~我之前接触过这个类型,可惜又忘了,一定要记住!这是一种类型的DP——M种N个进行DP,定义f[i][j]表示前 i 种中(这题是“家族”)选了 j 个(“只”蚂蚁)的
阅读全文
摘要:题意:N个编号为1~N的数,选任意个数分入任意个盒子内(盒子互不相同)的不同排列组合数。 解法:综合排列组合 Stirling(斯特林)数的知识进行DP。C[i][j]表示组合,从i个数中选j个数的方案数;S[i][j]表示Stirling数,i个数分成j份的方案数;P[i]表示P(i,i)全排列。
阅读全文
摘要:题意:有m个人有一张50元的纸币,n个人有一张100元的纸币。他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数。 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变形。(推荐阅读:http://www.cnblogs.com/chenhuan001/p/51571
阅读全文
摘要:题意:有N个相同的球,M个不同的盒子,每个盒子最多放K个球。请计算将这N个球全部放入盒子中的方案数模1000007后的结果。 解法:f[i][j]表示i个盒子里放j个球的方案数。 1.得到3重循环的坐法,枚举第i个盒子里放k个球——f[i][j]=sum( f[i-1][j-k~j] ) 1 #in
阅读全文
摘要:题意:给一个初始值1,每步操作将1替换为01,将0替换为10。问N步操作后有多少对连续的0。 解法:f[i]表示第i步后的答案。可以直接打表发现规律——奇数步后,f[i]=f[i-1]*2-1;偶数步后,f[i]=f[i-1]*2+1;至于原因——我只能简单说一点。第i步后的答案可由i-1步后的“0
阅读全文
摘要:题意:要求二叉树中每个节点的子节点数为0或2,求有N个节点高度为M的不同的二叉树有多少个(输出 mod 9901 后的结果)。 解法:f[i][j]表示高度为i的有j个节点的二叉树个数。同上题一样,把高度为i的树分解成1个根节点和2棵子树,子树中有一棵高度为i-1,较高,枚举其结点数,另一颗较矮,高
阅读全文
摘要:题意:定义一棵树的所有非叶节点都恰好有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元树。利用乘法原理,再
阅读全文
摘要:题意:给出在最底层的木头的个数,问有多少种堆放木头的方式。要求木头必须互相挨着在一起。 解法:f[i]表示最底层i个木头的堆放木头的方式。注意递推的思想!只需知道上一层堆放0~i-1个(即最底层堆放i个木头)的方式数就可以利用加法原理得到f[i]。 方法一、用前缀和求解。由于要求木头挨在一起,上层为
阅读全文
摘要:题意:求长度为N的序列中,最长的一个无重复元素的连续子序列。 解法:[L,R]每次R++或L++延伸就可以得到答案。 实现:(1)next[],last[]——O(n); 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #in
阅读全文
摘要:题意:N个等距村庄,买(>0)卖(<0)酒,供需平衡,运K则需K劳动力。问所需的最小劳动力。 解法:由于运出或运入1的都需经过2,所以无论如何,都可以等价于从2本身运入或运出。因此可以将1和2合并,2一定要运a1(小心:确保 i 的劳动力消耗量是由 i 之前,即 i-1 得到的),记a1+a2为现在
阅读全文
摘要:题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面。要求设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)。 解法:基本操作就是颠倒一个连续子序列。既然没有限制什么其他的条件,就一
阅读全文
摘要:题意:问蛇形回文的访问次序。 解法:很基础的一道题,先算出询问的点处在第几环,再用4个while一个个走一遍这一圈。P.S.我一直想办法想用不用while(),可是真的一直WA!所以用while()既方便又准确,不要小瞧她。 P.P.S.本蒟蒻刷DP刷累了(不会做~(┬_┬)),便来做这题,可惜耗时
阅读全文
摘要:题意:有N个有差别的盒子和分别为A个和B个的红球和蓝球,盒子内可空,问方案数。 解法:我自己打的直接用了求组合C的公式,把红球和蓝球分开看。对于红球,在N个盒子可放任意个数,便相当于除了A个红球还有N个“空”球可放进N个盒子里,这些球之间是无差别的,从这N+A个球中选N个,就是C(N,N+A)。对于
阅读全文
摘要:题意:一共有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
阅读全文
摘要:题意:问所有的N位数中,有多少个有偶数个数字3的数。 解法:f[i][j]表示i位数中含数字3的个数模2为j的个数。于是分第i位填3还是不填3讨论。 小tip:要模12345;for循环新定义了一个变量会慢一点点~
阅读全文
摘要:题意:问长度为L的所有01串中,有多少个不包含"101"和"111"的串。 解法:f[i][j]表示长度为i的01串中,结尾2位的十进制数是j的合法串的个数。那么,便由f[i-1][ ]逐个推出。 1 #include<cstdio> 2 #include<cstdlib> 3 #include<c
阅读全文
摘要:这题与前面的“踩方格”重复了,而且是大坑题!题目漏写了取模12345的条件! 详细解析请见我之前的博文——http://www.cnblogs.com/konjak/p/5936888.html 而这坑在我打了高精+滚动之后才知道。。我先把这个代码贴上来。。 1 #include<cstdio> 2
阅读全文
摘要:这题题意与前面的“判断整除”重复了。具体解释可看我这篇的博文。 http://www.cnblogs.com/konjak/p/5936738.html
阅读全文
摘要:题意:N个饰物,有重量和渴望程度。问在M的重量限制内能达到的最大的渴望度。 解法:经典的01问题,但有一个小技巧值得记住:用if比较大小比调用max函数快了不少,这题有100ms左右。
阅读全文
摘要:题意:有N瓶酒,不能连续喝>=3瓶的酒,问能喝的最大的酒量。 解法:同前一题相似,可以f[i][j]表示前i瓶中连续喝了j瓶的最大酒量。1.f[i][0]=f[i-1][3] ; 2.i=1或2时,f[i][j]=f[i-1][j-1]+a[i]; 3. f[i][3]=mx;也可以只用f[i]。
阅读全文
摘要:题意: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
阅读全文
摘要:题意:从自然数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个中取数的方案数。便
阅读全文
摘要:由于noi OJ上没有Special Judge,所以我是没有在这上面AC的。但是在POJ上A了。 题意如标题。 解法:f[i][j]表示a串前i个和b串前j个且包含b[j]的最长公共上升子序列长度 首先,可用3重循环得到,k循环找到b串j之前的最大长度子序列的结尾字符b[k],得以更新现在f[i]
阅读全文
摘要:题意:N*N的方格图每格有一个数值,要求从左上角每步往右或往下走到右下角,问走2次的最大和。 解法:走一次的很好想,而走2次,不可误以为先找到最大和的路,再找剩下的最大和的路就是正解。而应该认清动态规划的实质,定义为最佳解的状态,因此要走的2次都要涵括。 O(n^4)——f[i][j][k][l]表
阅读全文
摘要:题意:输出最长下降路径的长度。 解法:f[i][j]表示结尾于(i,j)的最长的长度。由于无法确定4个方位已修改到最佳,所以用递归实现。
阅读全文
摘要:题意:问把整数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](不新开一份时的方案数与每份中都少放
阅读全文
摘要:题意:给一个字符串,问至少切割几次使每子串都是回文的。 解法:f[i]表示前i个字符至少需要切割几次,预处理p[i][j]表示子串s[i]~s[j]是否为回文串。O(n^2) 另外,这题也类似“山区建小学”,可以枚举每个回文串的中心。但稍微麻烦一点。
阅读全文
摘要:题意:N天可买卖2次股票,问最大利润。 解法:f[i]表示前 i 天买卖一次的最大利润,g[i]表示后 i 天。 注意——当天可以又买又卖,不要漏了这个要求;数据较大。
阅读全文
摘要:题意:起始有1000元美元,给出N天美元与加拿大元的汇率。问N天内可以不停的兑换,每次兑换需要收取3%的手续费,问可以得到的最大的美元数。 解法:直接用2个变量存第 i 天时手中是美元和加拿大元的最大数额。 注意——不知为何计算机储存小数时会吞掉小数部分,所以保留2位小数时要用先*100后的整型存,
阅读全文
摘要:题意:其中n表示楼的高度,m表示你现在拥有的鸡蛋个数。 解法:f[i][j]表示 i 层楼有 j 个鸡蛋时,至少要扔多少次。3重循环,k为测试的楼层,分这时扔下去的鸡蛋碎和不碎的情况。要注意初始化。
阅读全文
摘要:这题其实在2.6前面的专题也有出现过,我还以为我有写,结果发现,并没有。于是就现在写了。这2题其实重复了......我就按放苹果的来说。 题意:把N个苹果放在M个盘子里,允许有的盘子空着不放,问共有多少种不同的分法。 解法:f[i][j]表示把 i 个苹果放在 j 个盘子的方案数,分有空盘子和无空盘
阅读全文
摘要:题意:给出一个带有通配符("?"可以代替一个字符,"*"可以代替零个或多个字符)的a字符串和一个不带通配符的b字符串,判断他们是否能够匹配。 解法:f[i][j]表示a串的前i个是否能和b串的前j个匹配。其中,"?"由f[i-1][j-1]推出,"*"由f[i-1][0~j]推出,便用一个变量p存这
阅读全文
摘要:题意:有N元,有无限多本10、20、50和100元的书,问有几种购买方案。 解法:f[i]表示用 i 元的方案数。还有一个 j 循环这次买多少元的书。 注意——要先 j 循环,再 i 循环。因为要先考虑第一种书,再是下一种书。若先 i 循环,后 j 循环,则相同的购买方案由购买次序不同而重复计算。
阅读全文
摘要:题意:有N个地址,从中选一些开餐馆,要保证相邻餐馆的距离大于k。问最大利润。 解法:f[i]表示在前 i 个地址中选的最大利润。
阅读全文
摘要:题意:一个无限大的方格矩阵,能向北、东、西三个方向走。问走N步共有多少种不同的方案。 解法: f[i]表示走 i 格的方案数。 状态转移方程推导如下——设l[i],r[i],u[i]分别为第 i 步向西、东、北的方案数,f[i]为总方案数。l[i]=l[i-1]+u[i-1], r[i]=r[i-1
阅读全文
摘要:题意:小智有N个精灵球,皮卡丘有M的初始体力,有K个野生小精灵。要收服尽可能多的野生小精灵,并使皮卡丘的剩余体力最大。 解法:01背包问题,增多一维来存第二个条件。f[i][j][k]表示抓前i个野生小精灵,用了j个精灵球,耗费了k的体力时能抓的最多的小精灵数。(我把[i]的那维简化掉了,PG里的m
阅读全文
摘要:题意:给一个正整数数列,可将其相加或相减,问是否有一个结果能被K整除。 解法:似上一题“糖果”的状态定义,f[i][j]表示是否有一个选了前 i 个数的结果模K余j。 P.S. 可以用滚动数组。
阅读全文
摘要:推荐!!from好友的博客——【网络流】网络流小总结 http://www.cnblogs.com/KonjakJuruo/p/5560129.html 原文转载如下——(当然,我也略修改了一些东西...) 一、dinic最大流 我的模板。模板上已经有了dfs上的优化(比我以前的快多了。。)优化啊优
阅读全文
摘要:题意:求取到总和为K的倍数的糖果的最大值。 解法:用模K的余数作为一个维度,f[i][j]表示在前i种糖果中取到总颗数模K余j的最大总颗数。 注意——f[i-1][j]要正常转移,而其他要之前的状态存在才能状态转移。
阅读全文
摘要:题意: 给两个字符串,可以增、删、改,问使这两个串变为相同的最小操作数。 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b串前j个完成匹配的最小操作数。 2.f[i][j]表示a串前i-1个和b串前j-1个完成匹配的最小操
阅读全文
摘要:{20160927 19:30~21:30} 总分400分,我113.33,稳稳地垫底了......(十分呼应我上面的博客名,hhh~)过了这么多天我才打完所有代码,废话我也就不多说了。不过,虽然时间花费的多,但我觉得我的PG也是“博采众长”了。 T1 接住苹果(bcatch) <!--[if gt
阅读全文