hdu 汉诺塔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 汉诺塔相关的知识,希望对你有一定的参考价值。
汉诺塔思路传送门:http://www.tuicool.com/articles/7FnMVf
下面是我的AC代码和一些特别的注意事项,比如我推导过程中犯得错误和写代码过程中犯的错误。
hd 1207 汉诺塔Ⅱ
注意中间变量由于pow()的 存在会比longlong还要大 更别说int了 所以要 unsigned long long 去存
#include <iostream> #include <cmath> using namespace std; typedef unsigned long long ll; const ll inf=9999999999999; ll dp[66]; int main() { dp[1]=1; for(int x=2;x<=64;x++) { ll min=inf; for(int i=1;i<x;i++) { ll t=2*dp[i]+pow(2,x-i)-1; if(min>t) { min=t; } } dp[x]=min; } int n; while(cin>>n) { cout<<dp[n]<<endl; } return 0; }
hd 2064 汉诺塔Ⅲ
关键点!!! 不要用pow,会WA的,因为
pow内只能用 float double ,强制转化后会失精度
还有就是注意数据范围
#include <iostream> #include <cmath> using namespace std; typedef long long ll; //typedef unsigned long long ll; //const ll inf=9999999999999; ll dp[36]; int main() { dp[1]=2; for(int i=2;i<36;i++) { dp[i]=3*dp[i-1]+2; } int n; while(cin>>n) { cout<<dp[n]<<endl; } return 0; }
以上是关于hdu 汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章