zoukankan      html  css  js  c++  java
  • hdu 1207 汉诺塔II (DP)

    点击打开链接

    对于i个盘子,从1到i进行枚举(变量设为j),将j个盘子移动到第四个柱子上,对于剩下的盘子,则可看成是三个柱子下的情况,枚举过程中找到一个最小值即为此时i个盘子的最小移动次数。注:三个柱子情况下,n个盘子需要移动2^n-1次

    #include"stdio.h"
    #include"math.h"
    __int64 a[70];
    int main()
    {
    	int i,j,n;
    	__int64 min;
    	a[1]=1;a[2]=3;a[3]=5;
    	a[64]=18433;
    	for(i=3;i<64;i++)
    	{
    		a[i]=2+(__int64)pow(2.0,i-1)-1;//注意这里是2.0
    		for(j=2;j<i;j++)
    		{
    			min=2*a[j]+(__int64)pow(2.0,i-j)-1;//注意这里是2.0
    			if(min<a[i])
    				a[i]=min;
    		}
    	}
    	while(scanf("%d",&n)!=EOF)
    		printf("%I64d\n",a[n]);
    	return 0;
    }


  • 相关阅读:
    touch
    ls
    Linux基础
    errors
    strconv
    strings
    fmt
    os/exec
    笔记本连不上网怎么办
    笔记本连不上网怎么办
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365178.html
Copyright © 2011-2022 走看看