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