2012年3月7日
摘要: 大致题意:有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度给定各个要求的小木板的长度,及小木板的个数n,求最小费用提示:以35 8 5为例:先从无限长的木板上锯下长度为21的木板,花费21再从长度为21的木板上锯下长度为5的木板,花费5再从长度为16的木板上锯下长度为8的木板,花费8总花费= 21+5+8 =34解题思路:利用Huffman思想,要使总费用最小,那么每次只选取最小长度的两块木板相加,再把这些“和”累加到总费用中即可本题虽然利用了Huffman思想,但是直接用HuffmanTree做会超时,可以用优先队列做因为朴素的Huf 阅读全文
posted @ 2012-03-07 17:20 万里心晴 阅读(718) 评论(0) 推荐(0) 编辑
摘要: priority_queue是很有用的的一个容器,你可以定义以什么为优先.所以你可以定义方法,也就是一个函数类对象,C++中有一个<fanction>里面定义了一些方法 如:less<class T> 这是按值大的优先 greater<class T>这是按值小的优先,priority_queue<class T, class comp=less< class Y>> 默认的是以大为先, 方法有 push() , pop(), empty(), front().等等#include <iostream>#include & 阅读全文
posted @ 2012-03-07 12:11 万里心晴 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 第一种做法:N!=1*2*3....*n求位数我们一般用对一个数取对数就可以了 ,log10(n!)=log10(1)+ log10(2) +log10(3)...+log10(n);所以循环求和就可以了!但是这里注意一点 结果要加1!因为这里计算出来的 log10(1)=0 !所以结果要加上这个误差 ‘1’第二种做法:这就是我最近研究的斯特林数,第一类斯特林数就可以做这个!补充一点,斯特林数能够做一切关于阶乘有关的大数运算 要深入学习!这里给出递归公式:log10(n!)=1.0/2*log10(2*pi*n)+n*log10(n/e)第一类做法:#include<iostream&g 阅读全文
posted @ 2012-03-07 10:30 万里心晴 阅读(329) 评论(0) 推荐(0) 编辑