上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 21 下一页
摘要: 给定一棵树,要求对于每一个节点,要么自己放联络器,要么儿子放联络器,要么父亲放联络器,求让所有点满足条件的最少联络器数。一道经典的看守皇宫问题,用DP解决。f[0,now]表示在now节点放联络器的以now为根的子树的最小代价f[1,now]表示now节点不放联络器,被他的儿子联络的以now为根的子树的最小代价f[2,now]表示now节点不放联络器,被他的父亲联络的以now为根的子树的最小代价注意树的形态开始并不确定,需要DFS一次来建树。状态的转移在程序里很清楚,输出答案是min{f[0,1],f[1,1]}(我以1为根节点重建的树),因为根节点不可能再有父亲了,f[2,1]没有意义。Vi 阅读全文
posted @ 2012-03-16 16:50 Codinginging 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 求一个图的最小生成树,用了prim,0ms,但前面WA了几次,这里进一步理解了prim,外部循环i只是控制次数,内部不用看i与j的值的关系,把d赋值成0,表示在树里,节省了一个布尔数组。View Code 1 program pku1258(input,output); 2 var 3 f : array[0..200,0..200] of longint; 4 d : array[0..200] of longint; 5 n : longint; 6 answer : longint; 7 procedure init; 8 var ... 阅读全文
posted @ 2012-03-15 12:01 Codinginging 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 给一些牛的排名关系,问有多少牛的排名确定。如果A比B强,就由A向B连边,之后求出这个图的传递闭包,对于一头牛,如果比它强的+比它弱的=N-1,它的排名一定。View Code 1 program pku3660(input,output); 2 var 3 g : array[0..101,0..101] of boolean; 4 answer : longint; 5 n,m : longint; 6 procedure init; 7 var 8 i,x,y : longint; 9 begin10 fillchar(g,sizeof(... 阅读全文
posted @ 2012-03-15 11:42 Codinginging 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 给定一个图,N个顶点,M条边,N值极小,对于每一条边,有ai,bi,ci,pi,ri这几个参数,表示这条边从ai到bi,如果之前经过了ci,那么费用是pi,否则费用为ri,求从1到N的最小费用。用f[i,j]为节点,i表示当前在哪个点,j转化为二进制数后为0位表示未经过这一点,为1这表示经过了这一点,进行SPFA即可{对j的解释,11:1011,表示经过1,3,4这三个点而没有经过2}View Code 1 program pku3411(input,output); 2 type 3 node = ^link; 4 link = record 5 ... 阅读全文
posted @ 2012-03-15 10:27 Codinginging 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠。记作S @ S 2. X(S)是X(X>1)个S 连接在一起的串的折叠。记作X(S)即SSSS…S(X 个S)。 3. 如果A @ A’, B @ B’,则AB @ A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) @ AAACBB, 而2(3(A)C)2(B) @AAACAAACBB 给一个字符串, 求它的最短折叠。一道DP题目,考试的时候在折叠时的转移搞乱了——用f[i,j]表示从i到j折叠后的最短长度,那么f[i,j]=min{f[i,k]+f[k+1,j] x<=k<y f[ 阅读全文
posted @ 2012-03-14 17:23 Codinginging 阅读(808) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 21 下一页