您的位置:首页 > 其它

uva 10254 - The Priest Mathematician

2012-08-13 16:09 253 查看
题意:给你四根柱子的汉若塔!求最少移动数!

解法:F(n) = min(2^k - 1 + F(n - k)) (0 <= k < n);问题来了!朴素的打表会TLE!观察F(n) - F(n - 1);

得到特有爱的数列 1, 2 ,2 , 4 ,4 ,4 , 8,8,8, 8, 16, 16, 16, 16, 16, 16,……

于是乎特邪恶的写法:

题目连接:点击打开链接

最有爱滴代码君:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
public static void main(String [] args) {
Scanner cin = new Scanner(System.in);
BigInteger[] dp = new BigInteger[10005];
dp[0] = new BigInteger("0");
BigInteger num = new BigInteger("1");
int k = 0, flag = 1;
for (int i = 1; i < 10001; i++) {
dp[i] = new BigInteger("0");
if (k == flag)	{
k = 0;
flag++;
num = num.multiply(BigInteger.valueOf(2));
}
k++;
dp[i] = dp[i - 1].add(num);
}
while (cin.hasNext()) {
int n = cin.nextInt();
System.out.println(dp
);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: