IT民工
加油!
上一页 1 ··· 25 26 27 28 29
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1568这是道神奇的题,求斐波那契数列的0到第100000000项的前四位,之前做过斐波那契数列的水题,求到63项能用__int64解决,但是到100000000项的话用数组都会超时,所以我是一点办法没有,只有学习大牛的解法。看了下网上的题解,大牛们用的都是下面这个公式,不得不说,数学好才是真的好!o(︶︿︶)o 唉,这公式是怎么出来的?以下是大牛的解释:先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);假设给出一个数10234432,那么log10(1 阅读全文
posted @ 2011-10-04 22:34 找回失去的 阅读(1287) 评论(1) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1065我发现我真的不适合做这些问题,老是考虑不完全。看到题之后,我知道要先排序,因为最省时的是l'>l,w'>w,排序之后就可以只看weight了,所以先将lenth作为一级参数,weight作为二级参数排序。排序之后就只需要考虑weight这个方面了。然后开始处理stick,对处理过的stick标记为1,剩下再循环处理,每次开始新的循环时间都要+1,直到所有的stick都处理完毕。我自己给代码的注释还是蛮给力的.贴下我的代码:#include<stdio.h>#include<stdlib.h 阅读全文
posted @ 2011-10-02 16:16 找回失去的 阅读(269) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1257这勉强算是一道动归的题吧,不能用贪心算法来做,因为你要拦截的导弹高度是敌方决定的,而且后面出现的高度有可能会比前面高,所以要用到动归的思想。用X[i]存储第i+1发导弹的高度,用Y[j]来存储第j+1套系统的所能阻截的最大高度,每次阻截都得将阻截的高度赋给Y[j]。然后看一共需要多少套系统就OK了。代码:#include <stdio.h>#define M 100000int x[M],y[M];int main(){ int n,i,j,c; while(scanf("%d&q 阅读全文
posted @ 2011-10-02 13:55 找回失去的 阅读(178) 评论(0) 推荐(0) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1093记得暑假时看过这道题,但是昨天上ZOJ想找DP题,发现手册上的第一道DP水题——也就是这道1093居然没有AC掉,所以就想着再做一下,结果真的对DP没感觉,居然没做出来,今天早上想了好久还是没有做对,最后看了下大牛的思路,终于A掉了。这种算法不是很给力,但是容易些。这道题就是砌砖,要求上面的砖比下面的小(长和宽),给你n块砖,找出能砌的最大高度。先贴下代码:#include<stdio.h>#include<stdlib.h>typedef 阅读全文
posted @ 2011-09-29 10:58 找回失去的 阅读(546) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1690 这个题把我搞抑郁了,并不是因为它难,而是自己的细节错误(近乎弱智),致使程序一直在出错。先说下题意,这道题是比较典型的最短路问题,求两点间的最短距离然后输出交通所需的费用。我参考的是Staginner的思路,也邪恶的参考的他的代码(我毕竟才第一次做这个,连dijkstra算法都不会)。PS:他写得还是很不错的,先把代码贴出来:注释是我的理解。这个算法在我看来是蛮耗时的,有O(N^3),但是不难理解,就是三层循环不断更新i与j点的最小费用,最后得出真正意义的最小费用就OK了,但是开始我也没想到这... 阅读全文
posted @ 2011-09-27 23:33 找回失去的 阅读(465) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1233这道题是昨天那道畅通工程的升级题,用了最小生成树的思想,我是参考白书上的kruskal代码做了这道题(PS:白书果然 是王道!)。首先并查集是必不可少的,将两点之间的连线看成边,这次不仅要将并查集初始化,还要初始化边的序号,用数组r来存储边的序号,题目要求有m=n*(n-1)/2条路。我们用u[i],v[i],w[i],分别表示两个端点的序号,以及两点间的距离,然后根据w[i]给边间接排序(排序的对象是边的序号,而不是边的长度)。下一步就是在所有集合由距离的小到 大连接起来。下面是代码:#include 阅读全文
posted @ 2011-09-26 00:23 找回失去的 阅读(455) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1232这并不是道难题,开始不会用并查集,把题目想得难了!这道题目是要我们求出要建的道路的最少条数,就是先把之前有连通的点归到一个集合中,然后每次输入两点的时候就将两个点所属的集合并成一个集合,然后用许多个不相交的集合来表示这些点的连通情况。而并查集的优点就是用树来表示集合。每棵树表示一个集合,因此树的形态无关紧要,把遍历过的结点都改成树根的儿子就行了。贴下我的代码:#include <stdio.h>int A[1050];/* 找x所在的树根,一层一层找 */int find(int x){ r 阅读全文
posted @ 2011-09-24 23:30 找回失去的 阅读(226) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1717这道题的解题思路十分巧妙,开始一直没想到分数是怎么从小数来的,后面参考了一些大牛的思路,让我豁然开朗,这确实很值得学习。以下的思路描述摘自hello kity的博客(她确实用了这个博客名称.^_^.,这题她描述写的比较好)首先跟你一个小数 令X= 0 . s1 s2 ..sn ( y1 y2 y3..ym ) 这样的话我们把小数点分为三个部分,分别用三种颜色标记了!我们可以把表达式转换成:X * 10 ^n=s1s2..sn+0.y1y2..ym; 我们用S1替换 s1s2..sn ,Y替换 0.(y1 阅读全文
posted @ 2011-09-22 10:14 找回失去的 阅读(798) 评论(0) 推荐(0) 编辑
上一页 1 ··· 25 26 27 28 29