上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 25 下一页
摘要: 题目链接:http://poj.org/problem?id=1338 第i个数又前面的数的2,3,5的倍数决定,因此,记录2,3,5所在数位置,然后递推。 1 //STATUS:C++_AC_0MS_172KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #inclu 阅读全文
posted @ 2013-02-26 15:12 zhsl 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1191 化简公式,然后记忆化搜索求解。a=sqrt( Σ(xi-x)^2/n ) => n*a^2=(x1-x)^2 + (x2-x)^2 + ...... + (xn-x)^2 => n*a^2=(x1^2+x2^2+......+xn^2) - 2*(x1+x2+......xn)*x + n*x^2 . 可以看出就是求分割后平方和的最小值,然后记忆化搜索就可以了,f[k][x1][y1][x2][y2]为方块(x1,y2)-(x2,y2)还需分割k次后的平方和的最小值。这里可以先求出所有方块的平方和值,使得在搜索 阅读全文
posted @ 2013-02-26 00:18 zhsl 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1659 给定无向图的度序列,求出图的可能邻接矩阵。如果该度序列能构成图,则称该序列是可图的。这里就是求度序列是否能可图化,其实算法仔细想下还是能想出来的,当时就想到是排序然后贪心选取了。其过程就是一个Havel-Hakimi定理: 1、度序列排序成非升序 2、从度序列的第一个数向其后的点构成边,直到其度数用完为止。如果没有用完,则不能可图化。 3、如果度数全部用完,则构图完成,否则进行第一步。 1 //STATUS:C++_AC_0MS_164KB 2 #include<stdio.h> ... 阅读全文
posted @ 2013-02-03 00:33 zhsl 阅读(279) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://poj.org/problem?id=3164 裸的最小树形图,用朱—刘算法解决,具体实现过程如下:算法一开始先判断从固定根开始是否可达所有原图中的点,若不可,则一定不存在最小树形图。这一步是一个很随便的搜索,写多搓都行,不加废话。第二步,遍历所有的边,从中找出除根结点外各点的最小入边,累加权值,构成新图。接着判断该图是否存在环。若不存在,则该图便是所求最小树型图,当前权为最小权。否则对环缩点,然后回到第二步继续判断。简化就是三个过程:找边—>找环—>缩点; 算法流程图: 参考样例: 代码实现有很多种方法,为了兼顾代码的长度和... 阅读全文
posted @ 2013-02-01 12:43 zhsl 阅读(808) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1679 求是否存在多个最小生成树,其实就是求次小生成树的权值是否等于最小生成树。 最小生成树的两个性质: 1.切割性质:假定所有边权值不相等,设S为即非空集合也非全集V的子集,边e是满足一个端点在S内,另一个端点不在S内的所有边中权值最小的一个,则图G的所有生成树均包含e。 2.回路性质:假定所有边权值不相等,设C是图G中的任意回路,边e是C上权值最大的边,则图G的所有生成树均不包含e。 求次小生成树一遍朴素的做法就是枚举最小生成树中的边删去,然后再在图上求最小生成树,复杂度O(n*m*lgm);对于稀疏图来... 阅读全文
posted @ 2013-01-31 12:45 zhsl 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3635 容易想到用二维数组记录状态求最短路,然后用优先队列优化,类似于Dijkstra和BFS。我开始设计的过程是直接直接从当前点向相邻点转移并找出所有可能状态,结果TLE。貌似是无关状态太多了,没想到卡得这么紧。别人的做法是只考虑两个状态:1、加一单位油 2、向相邻点移动;这样就砍掉了一些对最优解不必要的状态。 1 //STATUS:C++_AC_297MS_2404KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 阅读全文
posted @ 2013-01-31 00:03 zhsl 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2728 01规划问题,二分+prim。注意这里的图是稠密图,应该用prim而不是kruskal。堆优化的prim不适合稠密图,也不适合邻接矩阵建图,否则基本上没怎么优化O(n*(lgn+n)),因为每次操作的常数因子很大,所以lgn与n的差别不大了,尤其在n比较小的时候。我这题用堆优化的prim居然还超时了! 1 //STATUS:C++_AC_1079MS_8124KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 阅读全文
posted @ 2013-01-30 01:12 zhsl 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2976 很典型的01分数规划,sort+二分即可。注意精度问题,这种四舍五入的问题一般都是两种处理方法:1、printf("%.0lf\n",ans); 2、printf("%d\n",(int)(ans+0.5)); 1 //STATUS:C++_AC_47MS_196KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #i 阅读全文
posted @ 2013-01-29 17:49 zhsl 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里。有了01分数规划的基础后,这个题目就很简单了。构建函数f(mid)=Σ(w[i]-mid*d[i]),然后二分mid,如果图中有正权环,则f(mid)>0,则还有更优解l=mid,否则r=mid。 1 //STATUS:C++_AC_563MS_296KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #incl 阅读全文
posted @ 2013-01-29 16:12 zhsl 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3613 很好的一道题目,求在一个无向图上,经过n条边的两点之间的最短路。 推荐看 IOI国家集训队2008俞华程《矩阵乘法在信息学中的应用》 和 Matrix67<十个利用矩阵乘法解决的经典题目>的文章。 首先我们在求无向图上求任意两点间有多少条路径的时候是通过矩阵相乘来求的,即A^2矩阵上A[i][j]表示i->j长度为2的路劲有多少条,然后看Floyd的状态转移方程:f[i][j]=Min{ f[i][k]+f[k][j] | 0<k<n },是不是跟矩阵相乘很像,因此我们改造想到改造矩阵乘法,把 阅读全文
posted @ 2013-01-24 09:27 zhsl 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3463 给定一有向图,要你求出最短路的数目和最短路长度+1的数目。 比较方便的办法就是在Dijkstra的时候就直接把数目求出来,Dijkstra基于贪心的思想,一个点向其它点松弛后,那么就不会有后继点向此点松弛,因此可以来统计总共有多少条路径:1,更新v点最短距离后,v点路径数目等于u点路径数目 2,如果到点u到点v有等于v点当前的最短路径,则v点的路径数目加上u点的路径数目。求最短路长度+1的数目实际上就是求次短路的数目,如果次短路长度刚好比最短路长度大1,那么就是答案的一部分。注意到这个次短路比较特殊,之比最短路大1... 阅读全文
posted @ 2013-01-23 16:03 zhsl 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3013 题目大意是给你一颗树,树的边权值是当前边的所有儿子节点的权值之和*树边的固定花费,求整棵树的最小的花费。可以看出,每个儿子节点他的所有的祖先都有一个花费贡献值,要使得总共的花费最小,那么就要使他到根节点的固定花费最小,就是一个最短路的模型了。题目要注意几点:1,图是无向图 2,数据超int 3,注意n=0和n=1的情况。 1 //STATUS:C++_AC_594MS_4312KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<stri 阅读全文
posted @ 2013-01-22 02:18 zhsl 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1584 首先判断是否为凸多边形,叉积判断即可,然后判断点是否在多边形内,先用叉积然后点到直线距离。 1 //STATUS:C++_AC_0MS_192KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #in 阅读全文
posted @ 2013-01-20 02:18 zhsl 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1408 比较简单的题目,只是处理上麻烦了一点。 1 //STATUS:C++_AC_32MS_208KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #in 阅读全文
posted @ 2013-01-20 02:15 zhsl 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1039 比较有意思的一道题目,用光线射入一个管道,文最多能射多远。在最优解中一定存在光线紧挨着管道弯折点的情况,题目数据比较小,因此我们可以枚举管道上的两点,然后求出这条光线能入射的最远距离。只要判断当前直线管道壁是否相交,这里可以判断直线是否与对应的两个弯折点相交,如果相交,则直线合法,反之亦然,这样做方便处理。 1 //STATUS:C++_AC_32MS_188KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 阅读全文
posted @ 2013-01-20 02:12 zhsl 阅读(276) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 25 下一页