
dp
文章平均质量分 57
luyuncheng
luyuncheng@sina.com
展开
-
TSP问题 MTSP 双调TSP 商旅问题 中国邮差问题 担货郎问题
1.1 TSP商旅问题 coj1133(TSP是NP难问题一般只会到16)题意:某乡有n个村庄(16>n>1),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(1000>s>0)是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。原创 2012-09-10 23:19:06 · 7043 阅读 · 0 评论 -
uva11137
此题作者将其放入了数学基础里面的讲解问题中。个人觉得这题应该是dp的<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->d[i][j]表示使用不超过i的整数的立方,累加和为j这个状态设从d【0】【0】到d【i】【j】的路径数如果暴力的话会超时。需要用到剪支。我觉得剪支就是用到dp的最优子结构。如果前面算过来就直接原创 2013-01-12 19:41:25 · 482 阅读 · 0 评论 -
uva11361
此题第二章的例题5由于书上没写程序我就自己做了下。由于2^31=2147483648所以最大也就10位数字。所以极限情况是数字之和不大于100.那么对于k如果超过100的那么肯定就不存在各位和是它的倍数了。这里就可以剪支,当大于等于100的时候就直接输出0就可以了。然后按照书上的思想我们设f【x】表示不超过x的非负整数中满足条件的个数,所以我们得到的答案就是f【b】-f【a-1】这一条原创 2013-01-13 15:36:28 · 1162 阅读 · 1 评论 -
LA3516
此题放在数学基础中我觉得是不合适的 个人认为。此题明显的dpdp【i】【j】表示串i到j的树的个数。但是这里确实用到了一点点组合公式。就是在统计的时候当我们算完左边的树的时候在算右边的树那么两种情况的组合应该用乘法原理。然后因为此题是用回溯,那么回溯的终点=起点(有点回文串的意思)然后只要设置好边界条件就好了原创 2013-01-12 21:47:34 · 656 阅读 · 1 评论 -
ural1057
此题是数位dp的开端,我看的头疼奉上两篇论文:http://download.youkuaiyun.com/detail/luyuncheng/5169981 数位计数问题解法研究 http://download.youkuaiyun.com/detail/luyuncheng/5169985 浅谈数位类统计问题方法在文章中已经说了。此处说说我对这题的理原创 2013-03-22 14:59:28 · 848 阅读 · 0 评论 -
spoj1182
此题算是上一题的拓展,是paper中的第二题,其实比较简单,就是按照paper中说的。只需要统计1的个数,那么cal函数就可以统计出来了,那么我统计各个中的1的个数,当大于K的时候则停止然后在二分不断查找就可以了。算是比较容易的水题了原创 2013-03-22 20:17:02 · 582 阅读 · 0 评论 -
cf55d
此题其实说实话不算是数位dp把,虽然我不是按最优的方法过的。但是感觉记忆划搜索是可以的这个人写了个优化的:http://hi.baidu.com/sunhaowenprime/item/d3155f3418c14dd26c15e92e我的是500+啊 差好大啊。。。我用dp【i】【j】【k】表示i长度(位),j代表当前数,lcm代表最小公倍数 此状态下从0-当前数的最个数。为什么原创 2013-03-24 16:20:19 · 1008 阅读 · 0 评论 -
cf175e
此题同学想出来的。觉得网上的有点没说通。。所以说说理解只对dp部分 for(int i=1;i<N;i++) for(int j=0;j<=i;j++) for(int a=0;a<2;a++) for(int b=0;b<2;b++) { /*dp【i】【j】【a】【b】,长度为i,有j个好位置,a表示第i-1位置是否放了i(0没放,1放了),b表示第i位置是否原创 2013-03-26 21:20:46 · 760 阅读 · 0 评论 -
cf283d
此题证明花费时间够长。。。特意写这个来述说我痛苦的证明过程。。。。此题要在比赛的时候证明出全部的性质还是比较难的。。。(自己太菜了。。。)首先对于y个连续数的和可以这样表示:x=t+(t+1)+(t+2)+...+(t+y-1) 那么总和就是:x=y*(y-1)/2+y*t===>x=y*((y-1)/2+t)=====>2*x=y((y-1)+2*t)然后讨论奇偶情况:y为奇数时,只原创 2013-04-18 12:44:57 · 769 阅读 · 0 评论 -
dp泛做1
这里的dp范做根据网上的动态归法分析和网上的有个100个dp方程做的,题解很多是原版,没怎么动,有些是别人的一些其他做法,还有一些自己的想法。如果看到题解很别人一样,那就是摘自别人的。且这里只是一半。由于本文有些摘自网上,如有原主看到不想在此贴出的,请说明,将会撤出。如此文方法错误,或者冒犯某些原博主的文章还请见谅,还请指出,非常感谢机器分配(HNOI’95)0-1背包变形ty原创 2013-05-20 20:02:39 · 145098 阅读 · 3 评论 -
HDU 4003
一开始dp写出来了。。。结果初始化理解错了。。。dp[i][j]表示对于以i结点为根结点的子树,放j个机器人出去不收回所需要的权值和。 当j=0时表示放了机器人下去收回来,这里网上说是放一个人下去一直不能理解,其实是可以放多个下去,这里表示放了机器人回来的权值和,但是权值和是一个人遍历的值;比方说一个人遍历全部的点回到 i 和两个人分别遍历回来结果是一样的,可以理解为一个人下去一个原创 2013-09-18 10:14:40 · 794 阅读 · 0 评论 -
Code Forces Round 201 B Lucky Common Subsequence 拓展提问
这题原题的思路就是dp+kmp在此我有个小问题。。。如果这题的virus换成多个串,那么题目就可以是不能同时满足所有的virus 和不能满足对于任意的virus之和 那么我们该怎么用ac自动机来匹配呢?我的开始想法是把多个virus建到自动机上去,然后在用同样的dp方程来匹配但是感觉有点写不动。因为对于不能同时满足所有的virus 那么我们直接把所有的virus看成一个串建自动原创 2013-10-07 16:27:14 · 1232 阅读 · 0 评论 -
hdu 4352 数位+状压
这题用状态压缩维护数列0,9哪些数字出现过 然后通过状压推lis其他的就是数位统计了这里说下我做的时候有个地方没想到。。。导致写出了后效性其实就是我用状压维护lis的是时候如果对于当前数x后面已经有数了 那么如果加入x必然不会够成lis,那么我们又要统计方案数。那么我们就可以把当前这个x换成第一个比它大的,那么相当于原序列还是lis,且递增长度不变,但是方案数却增加原创 2013-10-10 00:28:42 · 1581 阅读 · 0 评论 -
HDU 4035 树上的期望
pps:这个是我转的,此题做了好久完全没思绪。。。网上大牛解释太过简单。。。此大牛写了详细的推导过程。相当好。我自己推了大概两大张纸才搞出来。一定要自己好好推,一步一步推过去。。。 对于有些地方我改了点http://blog.163.com/fengjie1314126@126/blog/static/96609996201181423525697/ps:只要你有信心把这篇文章看下转载 2013-10-03 13:50:52 · 1089 阅读 · 0 评论 -
hdu3652
此题 做了好久啊啊啊。。。看大家的做法大多是dfs 而且dp方程表示的和我最初想的不同。。。。。。试试我这种方法吧最开始的想的是 dp[ i ] [ j ] [ k ] 表示长度为i,最高位为j,余数为k的满足条件的个数,但是在做的时候发现这个方程真心不好维护比方说前面413 本是不满足条件的 但是4134 是满足条件的 这样我得把前面不满足条件的也加上。。。所以我们想到原创 2013-10-02 14:40:35 · 1798 阅读 · 0 评论 -
ceoi2004 锯木厂选址
此题的证明和公式可搞得够呛。。我是参考了以前的几分论文一起才搞懂的PS:谁能告诉我在csdn中怎么插入公式啊。。。首先我们定义几个变量:Sw【i】=∑w【i】 表示前i棵树的的总重量Sd【i】=∑d 【i】 表示第一棵树到i棵树的距离 其中Sd【1】=0; Sd【n+1】表示第一棵树到山脚锯木厂的距离Cost【i】 表示第i棵树的位置建立一个锯木厂,然后将前i-1棵树运送到次锯原创 2013-10-05 16:19:45 · 1487 阅读 · 0 评论 -
hdu 3886
数位啊。。不会啊啊啊。。。dp【i】【j】【k】【l】 匹配到第i个长度(包含前导0,),j判断当前是否是开始位置(因为有前导0),k表示前一位数是什么,l表示匹配str到什么位置然后就是三个状态转移,说先是判断一直到前导0的,然后一个是转入str下一个运动趋势,在一个是保持原有的趋势。然后就没了。原创 2013-10-08 21:02:32 · 2219 阅读 · 0 评论 -
cf119 div1 a,b,c Permutations AlgoRace Weak Memory
a题:纸上模拟下就知道在b中找一个连续的序列对应a,那么其他后面的值都可以往后或者插入了。直接考虑b中连续的对应a的位置就好了b题:先预处理每辆车的floyd距离 然后dp【i】【j】【k】 用i辆车,从j到k的最短时间 转移是dp【i】【j】【k】=dp【i-1】【j】【kk】+dp【0】【kk】【k】 即类似floyd的转移c题:貌似很多人是二分+spfa或者原创 2013-10-09 12:10:14 · 1083 阅读 · 0 评论 -
UVA11631
http://www.cnblogs.com/staginner/archive/2012/10/28/2743763.html原创 2013-01-12 22:27:08 · 511 阅读 · 0 评论 -
uva11385
此题调得我要死了 调了3个小时的java 还是从凌晨开始 我艹!!!!!还是runtime error 我都把所有数据输出来了。我觉得是我new太多的原因但是这个不用大数new根本做不了啊 我艹。。。我真的想骂人了。。。求大神改错:import java.math.BigInteger;import java.util.Scanner;public cl原创 2013-01-12 06:13:48 · 619 阅读 · 2 评论 -
uva11584 dp最少回文串划分
此题很简单但是我看到网上O(n^2)的写法居然慢与O(n^3)的写法,难道是数据太水,以至于初始化时间长了?o(n^2)就是处理一遍flag [ i ] [ j ] 意思是i的长度J的开始时是否是回文串,然后在用dp [ i ] 来求min { f [ i - j ] + 1 }o(n^2)代码如下 要慢一点#include#include#includeusing name原创 2012-12-01 22:47:17 · 3008 阅读 · 0 评论 -
uva11552
此题经wiking提醒,本来我从大方面想,如果只要块内都稳定了的情况下我dp块外就很容易了。一直不知道怎么处理块内的情况。后来他说可以将块内的情况都存下来。但是我怎么判断块内的排列呢? 这时候一个巧妙的用法就是set ,他可以方便的去除重复的元素,那么就可以理解为那几个元素全都排一起了,那么就只有一个块了。我们将它存下来。然后记录块的起点和终点。然后在全局dp 如果前一个块的首字母等于后一个原创 2012-12-25 17:12:27 · 844 阅读 · 0 评论 -
la4731
此题明显dp一开始就可以猜想,如果前 I 个分成 J 组,那么就可以用dp【I】【J】 等于dp【K】【J-1】 + 新的一组*组数 ,前k个组成一组,这样的dp很容易想到。那么我们现在要处理的就是新的一组怎么算。那么新的一组就是k+1到 I 的概率和。这里要预处理下各个情况的概率和就可以了。复杂度N^3notice:此题是概率题,用double存 还有就是那个后面的组数记得原创 2012-12-25 17:17:36 · 633 阅读 · 0 评论 -
uva11404
本来uva的题目都是不打算写解题报告的。。生怕自己太弱了,写的代码搞不好是水过去的。。。并非正解。但是这个题目困扰了我好久。。第一次想到方法b【】【】搜索和字典序标记是做英语听力的时候,第二次n/2是做阅读的时候想到的。哈哈我不认真啊这题目跟一道noi的题目好像,那题目是说给一个串求最少要增加多少个字符使其变成回文串。这道题目是要减去多少字符使其变成回文串。想了下觉得回文串那不就是前面出现原创 2012-12-13 21:47:09 · 1518 阅读 · 2 评论 -
la4727
约瑟夫变形。哎。。。居然。。。。xn的第k个数是x(n-k+1)的第一个数最后x1就是0啦 因为只有1个数 换成0开始的数嘛。x2就是0,1拉 然后去x2中的第一个数0 (这是换算过来的)x3就是0,1,2啦 然后取其中第一个数每回将k开始的数变成0开始的数所以o1 = (k-1)%1; o2 = (k-1)%2; o3 = (原创 2012-12-26 21:34:40 · 667 阅读 · 0 评论 -
uva11795
此题是状态dp 这个第一下就猜到了。我一开始看的时候就想用一个整形保存各个状态,然后深搜回溯,暴力。我想其实状态也不是很多应该可以过的。结果没过。我就在想有没有办法构造dp结构。后来我就想 如果当前状态含有这个J机器人,那么J的武器就拿了。同时在当前状态中除J外的那个dp值加上就可以了。依次类推。那么我就只要给全0状态赋值为1.其他的状态都是一步步加上来的。那么最坏情况就2^16种状态。原创 2012-12-30 23:09:18 · 794 阅读 · 0 评论 -
uva10564
此题 DP [ i ] [ j ] [ k ] 表示从i行j列往下走到底路径上的和为k的方案数此题输入的时候还有个小技巧。就是说你的第二行的元素是从第一个开始输入还是从前一行的元素位置开始输入。我的建议是从前一行的元素位置开始输入,这样for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++)原创 2013-01-02 01:46:06 · 661 阅读 · 0 评论 -
uva10817
此题是位运算的dp 有点类似0-1背包 因为思路就是m名求职者取还是不取 取就是1,不取就是0;然后dp【i】【j】 代表所有课程被选第一次的i状态 和被选第二次的j状态。那么我最后只要输出dp【1然后dp【i】【j】的转移方程就是在加入第i个求职者后的状态,与不加第i个求职者状态的比较ts1=j|state[i];//第一次状态已经拥有的课程在第i次状态下已经有了一次才能允原创 2013-01-04 15:46:17 · 1036 阅读 · 0 评论 -
LA2038
状态设计: 1、dp[i][0],表示在结点 i 没放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵; 2、dp[i][1],表示在结点 i 放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵。状态转移: 1、dp[i][0]=∑dp[j][1],j 是 i 的儿子结点;(根结点不放士兵时,与其相连的边必须由儿子结点来原创 2013-01-04 18:20:30 · 639 阅读 · 0 评论 -
uva11538
此题 题号不怎么好听。。。。例题题节是用unsigned long 但是个人认为double可能会准确些。怕丢失精度。然后都不了wa了 需要用long double 输入用llf原创 2013-01-04 21:08:41 · 510 阅读 · 0 评论 -
la4327
此题的备注真是牛逼爆了。。。。我是真的不知道怎么优化。在TLE5次 后我还是选择了搜题解。。。哎。。。此题数据确实变态。。。1来你需要用外挂输入,2来你需要用优先队列优化dp方程也比较好想吧...dp[ i ] [ j ] 代表到达第 i 行第 j 个路口能取到的最大值...dp从第一行开始做到最后一行... 这里单调队列优化的时候比平常优化要多那么一点点就是要从左到右 和从右原创 2013-01-05 22:28:32 · 652 阅读 · 0 评论 -
LA4015
此题是2007 成都 区域赛的题目 由于刚接触树形dp 耗时较久。且此题是我在想了一下午无果后 去洗了个澡 哎。。。洗澡的时候就胡思乱想 然后就想了一个类似于最短路的思想来做。我不知道我这样的理解是否正确。。。。 如果大神发现我理解错了 望加以指正!!非常感谢想了我一下午。 我开始想到的状态方程是包含当前点的最大距离。所以我开始的时候是用dp【x】【y】表示x到y的最小长度。但是想原创 2013-01-07 18:47:39 · 884 阅读 · 0 评论 -
LA4490
此题居然备注是请读者自己思考。。。。。。我是不是太菜了呢? 我是没有思考出来我本来想如果我把每次拿出i本书的所有状态都存下来。然后在依次往上找是不是算构造来最优子结构?但是此方法太暴力。而且我也不知到该怎么存下来。虽然我开始确实想到来用状态压缩。但是我不知到怎么保存各个状态后我拿掉某个对于另外一个的个数加减造成的影响。比方说 25 25 26 26 25 25 那么如果状态表示那么拿的状态原创 2013-01-08 15:48:07 · 1285 阅读 · 0 评论 -
LA4394
此题我一开是想想dp【i】【j】表示从i位置到j位置最少变换次数。但是我不知到怎么处理中间过程。即我要如何变换才知道是已经变到当前状态来 也就是说 我二维的情况存不下我前面的子状态。然后搜了下网上的题节:http://blog.youkuaiyun.com/hyogahyoga/article/details/7886416其实如果a串是空串的话,我们可以写出这样的区间dp方程:设dp[i][原创 2013-01-09 17:02:07 · 1479 阅读 · 0 评论 -
uva10237
此题黑书243页 hdu1820由于以前学校做过只有8个格子的但是思想是一致的。只是我那时候有点暴力过的这次就重新敲了一次。此题就算到30个格子也就改longlong就可以了但是把我坑死了!!!!我按照黑书的做法做了。过了网页上前面几个数据,最后一个没过。我以为是我long long 在哪些地方int转换的时候有问题我将所有的数据全换成int了。我调了好久!结果我随便交一个保存原创 2013-01-24 00:47:16 · 927 阅读 · 0 评论 -
la3637
此题开始想的时候以为贪心可以过。。。果断想简单了。首先排序是肯定的。由于有三层。所以对于每一层的安排会影响后一层的决策 所以是dp如何想呢,我参考来网上的解题报告:http://blog.youkuaiyun.com/wings_of_liberty/article/details/7522213下面写下自己的想法。当排序后。可以肯定最高的那本书是占用那一层的高度,但是至于那一层的宽度就暂时不知。原创 2013-01-09 21:22:49 · 735 阅读 · 0 评论 -
uva10559
此题请参见黑书123页。题目的方块用color 和len表示。用f [ i ] [ j ] [ k ] 表示把(color [ i ] , len [ i ] ), (color [ i+1 ] , len [ i+1 ] ) ,……, (color [ j-1 ] , len [ j-1 ] ),(color [ j ] , len [ j ]+k )合并的最大得分考虑(color原创 2013-01-11 15:51:27 · 736 阅读 · 0 评论