• POJ 2240 Arbitrage(最短路 Floyd)


    Arbitrage
     

    大意:

    给你m种货币,给你m种货币兑换规则,问通过这些规则最后能不能盈利。eg:1美元换0.5英镑,1英镑换10法郎,1法郎换0.21美元,这样1美元能换0.5*10*0.21=1.05美元,净赚0.05美元。

    思路:

    用Floyd找出每两种钱之间的最大兑换关系,遍历一遍,看有没有那种钱币最后能盈利,有就输出Yes,没有就是No。在处理钱币名称与编号之间的关系时,可以用map存(比较好用),当然也可以用字符串比较。

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <map>
     4 #define INF 0x3f3f3f3f
     5 using namespace std;
     6 
     7 char money[30];
     8 char change1[30], change2[30];
     9 double trans;
    10 double Map[50][50];
    11 int n, m;
    12 ///用map建立字符串与编号之间的关系
    13 map<string, int>p;
    14 
    15 void Floyd()
    16 {
    17     for(int k = 1; k <= n; k++)
    18     {
    19         for(int i = 1; i <= n; i++)
    20         {
    21             for(int j = 1; j <= n; j++)
    22             {
    23                 ///变形的最大路径  把‘+’变为了‘*’
    24                 if(Map[i][j] < Map[i][k]*Map[k][j])
    25                 {
    26                     Map[i][j] = Map[i][k]*Map[k][j];
    27                 }
    28             }
    29         }
    30     }
    31     return ;
    32 }
    33 
    34 void Solve()
    35 {
    36     int cnt = 1;
    37     while(~scanf("%d%*c", &n) && n)
    38     {
    39         for(int i = 1; i <= n; i++)
    40         {
    41             scanf("%s", money);
    42             p[money] = i;
    43             Map[i][i] = 1;
    44         }
    45         scanf("%d%*c", &m);
    46         for(int i = 1; i <= m; i++)
    47         {
    48             scanf("%s%lf%s", change1, &trans, change2);
    49             Map[p[change1]][p[change2]] = trans; ///去map中的数据建图
    50         }
    51         Floyd();
    52         bool flag = false;
    53         for(int i = 1; i <= n; i++)
    54         {
    55             if(Map[i][i] > 1)
    56             {
    57                 flag = true;
    58                 break;
    59             }
    60         }
    61         if(flag)
    62         {
    63             printf("Case %d: Yes
    ", cnt++);
    64         }
    65         else
    66         {
    67             printf("Case %d: No
    ", cnt++);
    68         }
    69     }
    70 }
    71 
    72 int main()
    73 {
    74     Solve();
    75 
    76     return 0;
    77 }
    Arbitrage
  • 相关阅读:
    RequireJS 和 Sea.js
    zoom:1
    font-sqirrel
    WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字
    获取表单select域的选择部分的文本
    写一个简单的form表单,当光标离开表单的时候表单的值发送给后台
    Python3基础 e记法示例
    Python3基础 response.read 输出网页的源代码
    Python3基础 访问在线的有道词典
    Python3基础 response.info 服务器返回的header信息
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3525974.html
Copyright © 2020-2023  润新知