http://acm.fzu.edu.cn/problem.php?pid=1919大意就是求题目所定义的K合并排序需要交换的次数。
记忆化搜索
1、n<k,要用(n-1)*n/2比较
2、n≥k时,n分成k堆,有n%k堆的f(n/k+1,k)
3、有k-n%k堆的f(n/k,k),
4、k堆合并时,最大比较次数为:每次取最小值都是让k堆比较取最小,用k-1次,总的为(k-1)*(n-k+1)
5、最后剩下k-1堆含一个元素的堆,用(k-1)*(k-2)/2次比较。
java HashMap。
新建HashMap:Map<BigInteger,BigInteger> map=new HashMap<BigInteger,BigInteger>();
插入键值:map.put(n,tmp)
查找键是否存在:map.containsKey(n),返回boolean型。
返回键值:map.get(n)
Java Map接口扩展:
http://www.javaeye.com/topic/421014