您的位置:首页 > 其它

uva 10254——The Priest Mathematician

2016-03-28 21:37 585 查看
题意:汉诺塔题目的变形,有4根柱子,可以把顶部的k个盘子移到最后的柱子上,然后按照汉诺塔,问最后走的最小步数。

思路:递推,经过递推可以发现f
= f[k]*2+g[n-k],其中f
为4个柱子时的最小步数,g
为3根柱子的最小步数。要用java大数来解决。

code:

import java.math.*;
import java.util.Scanner;

public class Main {
public static void main(String args[]){

BigInteger f[] = new BigInteger[10010];
f[0] = BigInteger.valueOf(0);
f[1] = BigInteger.valueOf(1);
int i = 2;
int k=1;
while(i <= 10000){
BigInteger add = BigInteger.valueOf(1).shiftLeft(k);
for(int j=0; j<k+1 && i<=10000; ++j){
f[i] = f[i-1].add(add);
++i;
}
++k;
}
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
int n = cin.nextInt();
System.out.println(f
);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: