zoukankan      html  css  js  c++  java
  • bzoj1019: [SHOI2008]汉诺塔

    dp.

    用g[x][i]代表第x根柱子的i个原盘会到哪个柱子,f[x][i]代表所用步数。

    则根据g[x][i-1]和g[g[x][i-1]][i-1]就能知道搬运的过程是怎样的。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    char p[7][3];
    int g[40][3],n;
    long long f[40][3];
    
    int main() {
        scanf("%d",&n);
        for(int i=1;i<=6;i++) scanf("%s",p[i]);
        
        for(int i=1;i<=3;i++)
        for(int j=1;j<=6;j++) if(p[j][0]-'A'+1==i) {
            f[i][1]=1;        
            g[i][1]=p[j][1]-'A'+1;
            break;
        }
        
        for(int i=2;i<=n;i++) 
        for(int x=1,y,z;x<=3;x++) {
            y=g[x][i-1];
            z=6-y-x;
            f[x][i]=f[x][i-1]+1;
            if(g[y][i-1]==z) {
                f[x][i]+=f[y][i-1];
                g[x][i]=z;    
            }
            else {
                f[x][i]+=f[y][i-1]+1+f[x][i-1];    
                g[x][i]=y;
            }
        }
        printf("%lld
    ",f[1][n]);
        return 0;    
    }
  • 相关阅读:
    python三大神器
    centos安装fish shell
    linux查看日志
    web攻击
    web安全之XSS
    JSONP && CORS
    css 定位
    MIT-线性代数笔记(1-6)
    es6 Object.assign
    ECMAScript 6 笔记(六)
  • 原文地址:https://www.cnblogs.com/invoid/p/5603333.html
Copyright © 2011-2022 走看看