1 solutions
-
0
[算法分析] 1.先考虑三个汉诺塔,三个汉诺塔的容易知道是d[i]=2*d[i]+1 ,d[1]=1
2.如果将j个移动到某个柱子上,剩余的只能使用三个柱子来移动了。
#include<bits/stdc++.h> using namespace std; const int N=55; int f[N],d[N]; int main() { int n; cin>>n; //首先是三塔 d[1]=1; for(int i=2;i<=n;i++) { d[i]=d[i-1]*2+1;//先i-1=>b,i=>c,i-1=>b; } memset(f,0x3f,sizeof f); f[0]=0; for(int i=1;i<=n;i++) { for(int j=0;j<=i;j++) { f[i]=min(f[i],f[j]+d[i-j]+f[j]); //4个柱子移动j个盘子,i-j个盘子就只能3个柱子移动,j个盘子再由4个柱子移动回去 } } cout<<f[n]; return 0; }
- 1
Information
- ID
- 1260
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 9
- Accepted
- 3
- Uploaded By