【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
2017-03-21 09:17
253 查看
1019: [SHOI2008]汉诺塔
Description
汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 #define LL long long 8 9 int x[10],y[10]; 10 char s[5]; 11 12 LL f[5][40]; 13 int p[5][40]; 14 15 int main() 16 { 17 int n; 18 scanf("%d",&n); 19 for(int i=1;i<=6;i++) 20 { 21 scanf("%s",s); 22 x[i]=s[0]-'A'+1;y[i]=s[1]-'A'+1; 23 } 24 for(int i=6;i>=1;i--) p[x[i]][1]=y[i]; 25 for(int i=1;i<=3;i++) f[i][1]=1; 26 for(int i=2;i<=n;i++) 27 { 28 for(int a=1;a<=3;a++) 29 { 30 int b=p[a][i-1],c=6-a-b; 31 if(p[b][i-1]==c) 32 { 33 f[a][i]=f[a][i-1]+f[b][i-1]+1; 34 p[a][i]=c; 35 } 36 else 37 { 38 f[a][i]=f[a][i-1]+1+f[b][i-1]+1+f[a][i-1]; 39 p[a][i]=b; 40 } 41 } 42 } 43 printf("%lld\n",f[1] ); 44 return 0; 45 }
View Code
2017-03-21 09:17:45
相关文章推荐
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
- bzoj1019: [SHOI2008]汉诺塔(dp)
- BZOJ_1019_[SHOI2008]_汉诺塔_(DP)
- bzoj1019: [SHOI2008]汉诺塔 dp
- 【BZOJ 1019】 [SHOI2008]汉诺塔
- bzoj千题计划109:bzoj1019: [SHOI2008]汉诺塔
- [bzoj 1019--SHOI2008]汉诺塔
- bzoj1019 [SHOI2008]汉诺塔
- 【bzoj1019】[SHOI2008]汉诺塔
- [BZOJ1019][SHOI2008]汉诺塔(递推)
- 【BZOJ】【1019】【SHOI2008】汉诺塔
- 【bzoj1019】[SHOI2008]汉诺塔
- [递推] BZOJ1019: [SHOI2008]汉诺塔
- bzoj1019: [SHOI2008]汉诺塔
- [bzoj1019]:[SHOI2008]汉诺塔
- bzoj1019 [SHOI2008]汉诺塔
- 【bzoj1019】[SHOI2008]汉诺塔
- BZOJ 1019: [SHOI2008]汉诺塔
- [BZOJ1019][SHOI2008]汉诺塔
- bzoj 1019: [SHOI2008]汉诺塔(打表)