当前位置: 代码迷 >> 综合 >> HDOJ 1207 汉诺塔II
  详细解决方案

HDOJ 1207 汉诺塔II

热度:37   发布时间:2023-10-21 19:43:28.0

HDACM1207

采用动态规划的方法来做。
假设上面的a个盘子是通过4根柱子全移到第2个柱子上,则下面(n-a)个盘子只能通过3根柱子移到最后一根柱子上,
此时,h2[n] = h2[a]*2+(long)Math.pow(2,n-a)-1。
显然这不一定是最优解,所以a++依次求直到找到h2[n]的最优解

import java.util.Scanner;public class Main {public static void main(String[] args) {long h2[] = new long[65];h2[1] = 1;h2[2] = 3;h2[3] = 5;for (int i = 4; i < h2.length; i++) {h2[i] = h2[i/2]*2+(long)Math.pow(2, i-i/2)-1;for (int j = i/2+1; j < i; j++) {long t = h2[j]*2+(long)Math.pow(2, i-j)-1;if (t<h2[i]) {h2[i] = t;}}}Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int n = sc.nextInt();System.out.println(h2[n]);}sc.close();}
}