码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2064

时间:2017-12-06 14:38:31      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:space   iii   highlight   set   ios   递归   names   else   mes   

  上实验课随手水一波汉诺塔III#include<iostream>

#include<iostream>
#include<cstring>

#define LL long long
#define N 40

using namespace std;

LL f[4][4][4][N];

LL solve(int a,int b,int c,int n){
	if(n == 0) return 0;

    if(f[a][b][c][n]) return f[a][b][c][n];

    if(n == 1){
		if(a == 2 || b == 2) return f[a][b][c][n] = 1;
		else return f[a][b][c][n] = 2;
    }
    else if(a == 2){
        return f[a][b][c][n] = solve(a,c,b,n-1) + 1 + solve(c,a,b,n-1) + solve(a,b,c,n-1);
    }
    else if(b == 2){
        return f[a][b][c][n] = solve(a,b,c,n-1) + solve(b,c,a,n-1) + 1 + solve(c,b,a,n-1);
    }
    else{
        return f[a][b][c][n] = solve(a,c,b,n-1) + solve(c,b,a,n-1) + 1 + solve(b,c,a,n-1) + solve(c,a,b,n-1) + 1 + solve(a,c,b,n-1) + solve(c,b,a,n-1);
    }
}

int main(){
    int n;
    while(cin >> n){
        cout << solve(1,3,2,n) << endl;
        memset(f,0,sizeof(f));
    }
    return 0;
}

  主要加个记忆化即可,写成递归也行吧。。。

HDU2064

标签:space   iii   highlight   set   ios   递归   names   else   mes   

原文地址:http://www.cnblogs.com/woodenhead/p/7992150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!