摘要: http://poj.org/problem?id=3253经典题目了,大意是说如果要切断一个长度为a的木条需要花费代价a, 问要切出要求的n个木条所需的最小代价。无论是以下哪种方法,最原始的思路就是从相反的角度思考,将每两个合并,花费的代价是他们两个的和,一直到最后只剩下一个方法一:使用STL的priority_queue,先将所有的木条放入到队列中。每次取出两个木条将他们的长度相加,加入到花费当中去,然后放回到队列中。这样计算的时间复杂度就是O(NlogN)。方法二:使用单调队列,我们可以分析到,由于每次取出的都是优先队列中最小的两个,也就是首部的两个,那我们可以考虑另外借用一个数组b用来 阅读全文
posted @ 2014-03-01 22:00 再见~雨泉 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 经典的字典树的题目了,这次完全是按照自己的风格来写的,没有参考其他人的代码风格来写。分析:如果采用常规的暴力枚举,那么复杂度就是O(n*n*str.length) = O(10^9),这明显是会超时的 采用字典树的方式的话所有的字符串的每一个字符都只会被访问一次,所以复杂度就是O(n*str.length) = O(10^5) 这个复杂度也很好分析:由于每一个字符串的长度不会超过10,那么当建一颗字典树时,那它的高度就不会超过10,就算最后没有一个会产生矛盾的号码,那么也只有n(10^4)个叶子节点 1 #include 2 #include 3 #include 4 #in... 阅读全文
posted @ 2014-03-01 21:24 再见~雨泉 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 地址http://acm.hdu.edu.cn/showproblem.php?pid=1896题目大一比较简单,就是说在一条直线道路上有n个石头,往前走,遇到一个数一个,如果遇到的是第奇数个那就把这个石头往前扔距离D[i], 如果是第偶数个,就放置不管。问遇到的最后一个石头距离出发点的位置是多少。做起来也比较简单就是每遇到第奇数个石头,就将其加上D[i],放回到优先队列(priority_queue)中,然后再去掉一个石头直接看代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #incl... 阅读全文
posted @ 2014-03-01 21:09 再见~雨泉 阅读(850) 评论(0) 推荐(0) 编辑