• POJ 1860 Currency Exchange(最短路 Bellman-Ford)


    Currency Exchange
     

    大意:有多种货币,之间可以交换,但是需要手续费,也就是说既有汇率又有手续费。问经过交换之后能不能赚。

    思路:Bellman_Ford,因为要求最长路,所以松弛条件改一下就好了。

    Tips:

    3              2                  1                20.0
    货币的数量 兑换点的数量 主人公拥有的货币量 主人公拥有货币的价值 1 2 1.00 1.00 1.00 1.00
    //货币1与货币2交换时,1与2的汇率是1.00,1换2的手续费是1.00,2与1的汇率是1.00,2换1的手续费是1.00。 2 3 1.10 1.00 1.10 1.00
    //货币1与货币2交换时,1与2的汇率是1.10,1换2的手续费是1.00,2与1的汇率是1.10,2换1的手续费是1.00。
     
     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <map>
     4 #include <stack>
     5 #include <string.h>
     6 #define INF 0x3f3f3f3f
     7 using namespace std;
     8 
     9 int n, m, s;
    10 double v;
    11 double dis[110];
    12 int t;
    13 
    14 struct node
    15 {
    16     int x, y;
    17     double r, c;
    18 } Map[210];
    19 
    20 bool Bellman_Ford()
    21 {
    22     memset(dis, 0, sizeof(dis));
    23     dis[s] = v;
    24     for(int i = 1; i <= n-1; i++)
    25     {
    26         bool flag = false;
    27         for(int j = 0; j < t; j++)
    28         {
    29             if(dis[Map[j].y] < (dis[Map[j].x]-Map[j].c)*Map[j].r)
    30             {
    31                 dis[Map[j].y] = (dis[Map[j].x]-Map[j].c)*Map[j].r;
    32                 flag = true;
    33             }
    34         }
    35         if(!flag)
    36         {
    37             break;
    38         }
    39     }
    40     for(int i = 0; i < t; i++)
    41     {
    42         if(dis[Map[i].y] < (dis[Map[i].x]-Map[i].c)*Map[i].r)
    43         {
    44             return true;
    45         }
    46     }
    47     return false;
    48 }
    49 
    50 void Solve()
    51 {
    52     int a, b;
    53     double Rab, Rba, Cab, Cba;
    54     while(~scanf("%d%d%d%lf", &n, &m, &s, &v))
    55     {
    56         t = 0;
    57         for(int i = 0; i < m; i++)
    58         {
    59             scanf("%d%d%lf%lf%lf%lf", &a, &b, &Rab, &Cab, &Rba, &Cba);
    60             Map[t].x = a;
    61             Map[t].y = b;
    62             Map[t].r = Rab;
    63             Map[t++].c = Cab;
    64             Map[t].x = b;
    65             Map[t].y = a;
    66             Map[t].r = Rba;
    67             Map[t++].c = Cba;
    68         }
    69         if(Bellman_Ford())
    70         {
    71             printf("YES
    ");
    72         }
    73         else
    74         {
    75             printf("NO
    ");
    76         }
    77     }
    78 }
    79 
    80 int main()
    81 {
    82     Solve();
    83 
    84     return 0;
    85 }
    Currency Exchange
  • 相关阅读:
    LeetCode Fraction to Recurring Decimal
    LeetCode Excel Sheet Column Title
    LeetCode Majority Element
    LeetCode Reverse Nodes in k-Group
    LeetCode Recover Binary Search Tree
    一天一个设计模式(10)——装饰器模式
    一天一个设计模式(9)——组合模式
    一天一个设计模式(8)——过滤器模式
    一天一个设计模式(7)——桥接模式
    一天一个设计模式(6)——适配器模式
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3526421.html
Copyright © 2020-2023  润新知