• codeforces 392B Tower of Hanoi


    把前n个碟子从第一个塔移动到第三个塔有两种方法:

    1.把前n-1个移动到第二个塔,把第n个移动到第三个塔,然后把前n-1个从第二个移动到第三个;

    2.把前n-1个移动到第三个塔,把第n个移动到第二个塔,然后把前n-1个继续移动到第一个的塔,把第N个移动到第三个塔,最后把前n个移动到第三个塔就行了;

    状态转移方程:

    a=dp[i][3-i-j][k-1]+matrix[i][j]+dp[3-i-j][j][k-1];
    b=dp[i][j][k-1]+matrix[i][3-i-j]+dp[j][i][k-1]+matrix[3-i-j][j]+dp[i][j][k-1];
    dp[i][j][k]=min(a,b);

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    int matrix[3][3];
    
    long long dp[3][3][45];
    
    int main()
    {
        for(int i=0; i<3; i++)
            for(int j=0; j<3; j++)
                scanf("%d",&matrix[i][j]);
        int n;
        long long a,b;
        scanf("%d",&n);
        for(int k=1; k<=n; k++)
        {
            for(int i=0; i<3; i++)
                for(int j=0; j<3; j++)
                {
                    if(i!=j)
                    {
                        a=dp[i][3-i-j][k-1]+matrix[i][j]+dp[3-i-j][j][k-1];
                        b=dp[i][j][k-1]+matrix[i][3-i-j]+dp[j][i][k-1]+matrix[3-i-j][j]+dp[i][j][k-1];
                        dp[i][j][k]=min(a,b);
                    }
                }
        }
        cout<<dp[0][2][n]<<endl;;
    }
    View Code
  • 相关阅读:
    删除文件夹右键下的部分目录
    c# datagridview导出到excel【转载】
    使用AO新增记录的3种方法【转载】
    AE 打包
    ArcMap 9使用技巧
    ArcEngine 渲染的使用【转载】
    关于数据库版本压缩
    SDE数据源直连
    ArcCatalog 9中的使用技巧
    AE指定字段转成注记
  • 原文地址:https://www.cnblogs.com/yours1103/p/3559303.html
Copyright © 2020-2023  润新知