• UVA 104 Arbitrage


    动态规划类似FLOYD dp[i][j][k] 表示第i个点经过K次到达j点能获得的最大利润

    #include <map>
    #include <set>
    #include <list>
    #include <cmath>
    #include <ctime>
    #include <deque>
    #include <stack>
    #include <queue>
    #include <cctype>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <climits>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define LL long long
    #define PI 3.1415926535897932626
    using namespace std;
    int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
    #define MAXN 25
    double G[MAXN][MAXN];
    double dp[MAXN][MAXN][MAXN];
    int fa[MAXN][MAXN][MAXN];
    int N;
    int cnt,ans;
    void init()
    {
        memset(dp,0,sizeof(dp));
        memset(fa,0,sizeof(fa));
        for (int i = 1; i <= N; i++)
        {
            dp[i][i][1] = 1.0;
            for (int j = 1; j <= N; j++)
            {
                fa[i][j][1] = i;
                if (i == j) continue;
                scanf("%lf",&dp[i][j][1]);
            }
        }
    }
    bool judge()
    {
        for (int k = 2; k <= N; k++)
            for (int i = 1; i <= N; i++)
            if (dp[i][i][k] > 1.01)
        {
            ans = i;
            cnt = k;
           //8 printf("%d %d
    ",ans,cnt);
            return true;
        }
        return false;
    }
    void output(int x,int y,int cnt)
    {
        if (cnt == 0)  {printf("%d",x);return ;}
        //printf("%d %d %d %d
    ",x,y,cnt,fa[x][y][cnt]);
        output(x,fa[x][y][cnt],cnt - 1);
        printf(" %d",y);
    }
    int main()//节点i通过K次转换到达节点j能拿到的钱
    {
       // freopen("sample.txt","r",stdin);
        while (scanf("%d",&N) != EOF)
        {
            init();
            for (int k = 2; k <= N; k++)
              for (int i = 1; i <= N; i++)
                for (int j = 1; j <= N; j++)
                   for (int p = 1; p <= N; p++)
            {
                if (dp[i][j][k] < dp[i][p][k - 1] * dp[p][j][1])
                {
                    dp[i][j][k] = dp[i][p][k - 1] * dp[p][j][1];
                    fa[i][j][k] = p;//在i经过K次转换到P的过程中第K 是p->j
                }
            }
            bool found = judge();
            if (!found)  puts("no arbitrage sequence exists");
            else {  output(ans,ans,cnt); putchar('
    ');}
        }
        return 0;
    }
  • 相关阅读:
    Django -- 路由系统(URLconf)
    Django简介
    jQuery
    DOM
    JavaScript
    HTML,CSS
    Redis PK Memcached
    ORM框架-SQLAlchemy
    Memcached操作以及用法
    Py3快速下载地址
  • 原文地址:https://www.cnblogs.com/Commence/p/4012703.html
Copyright © 2020-2023  润新知