zoukankan      html  css  js  c++  java
  • 贴代码—CF230 DIV1 B

         一直理解错了一句话,以为是用最小的move求最小的花费,

         读错题目的有木有!!!

         不懂汉诺塔的原理有木有!!!!

         

         记忆化DP即可。。。。。。

         方程:    

         long long ans1=dfs(n-1,a,b)+cost[a][c]+dfs(n-1,b,c);
        long long ans2=dfs(n-1,a,c)+cost[a][b]+dfs(n-1,c,a)+cost[b][c]+dfs(n-1,a,c);
        dp[n][a][c]=min(ans1,ans2);

    完整代码:#include<iostream>

    #include<math.h>
    #include<algorithm>
    #include<string.h>

    using namespace std;
    long long dp[100][4][4];
    int cost[4][4];
    int n;
    long long dfs(int n,int a,int c)
    {
        if (n==0return 0;
        if (dp[n][a][c]!=-1return dp[n][a][c];

        int b=6-a-c;
        long long ans1=dfs(n-1,a,b)+cost[a][c]+dfs(n-1,b,c);
        long long ans2=dfs(n-1,a,c)+cost[a][b]+dfs(n-1,c,a)+cost[b][c]+dfs(n-1,a,c);
        dp[n][a][c]=min(ans1,ans2);
        return dp[n][a][c];
    }
    int main()
    {
        memset(dp,-1,sizeof(dp));
        for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
        cin>>cost[i][j];
        cin>>n;
        cout<<dfs(n,1,3)<<endl;
        return 0;

    } 

    DAY DAY UP!!! 

    随性Code
  • 相关阅读:
    shuffle
    clamp
    max
    zip
    enumerate
    isinstance
    stack
    reshape(-1)
    meshgrid
    最长回文子串
  • 原文地址:https://www.cnblogs.com/forgot93/p/3558504.html
Copyright © 2011-2022 走看看