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

    令G[i][0/1/2]表示1~i号盘最终会被统一叠到第几号柱子

        F[i][0/1/2]表示1~i号盘最终被叠起来的步数

    规则是确定的,那么转移也是确定的

    i从i-1转移过来

    分类讨论一下

    难度在于认识到所有东西都是确定的

    #include<cstdio>
    using namespace std;
    int G[35][3];
    long long F[35][3];
    char s[5];
    int main(){
    	int n;
    	scanf("%d",&n);
    	for (int i=0; i<3; i++) F[1][i]=1,G[1][i]=-1;
    	for (int i=0; i<6; i++){
    		scanf("%s",s);
    		int l=s[0]-'A',r=s[1]-'A';
    		if (G[1][l]==-1) G[1][l]=r;
    	}
    	for (int i=2; i<=n; i++)
    		for (int x=0; x<3; x++){
    			int y=G[i-1][x],z=3-x-y;
    			if (G[i-1][y]==x){
    				G[i][x]=y;
    				F[i][x]=F[i-1][x]+1+F[i-1][y]+1+F[i-1][x];
    			}
    			else{
    				G[i][x]=z;
    				F[i][x]=F[i-1][x]+1+F[i-1][y];
    			}
    		}
    	printf("%lld
    ",F[n][0]);
    	return 0;
    }
    

      

  • 相关阅读:
    设置eclipse编码
    前端基础知识
    微信小程序
    jQuery下拉框
    Vue-cli的安装
    vue的数据交互形式
    node安装和小测试
    shui
    JQ-滚动条下拉无限的加载数据
    HTML-video全屏
  • 原文地址:https://www.cnblogs.com/silenty/p/9872586.html
Copyright © 2011-2022 走看看