• POJ 1860 Currency Exchange【bellman-Ford模板题】


    传送门:http://poj.org/problem?id=1860

    题意:给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换回到s,能否使本金增多。

    思路:bellman-Ford模板题。直接跑一遍,判断是否存在正环就好了。(复杂度n*m)

    代码:

    #include<iostream>
    using namespace std;
    int n;     //货币种数
    int m;     //兑换点数量
    int s;     //持有第s种货币
    double v;  //持有的s货币的本金
    double dis[101];  //s到各点的权值
    struct node
    {
        int a;      //货币a
        int b;      //货币b
        double r;   //汇率
        double c;   //手续费
    } num[202];
    bool Bellman_Ford()
    {
        for(int i = 1; i <= n; i++)
            dis[i] = 0;
        //初始源点的值即为本金
        dis[s] = v;
        for(int i = 1; i < n; i++)
        {
            bool flag = false;
            for(int j = 1; j <= 2 * m; j++)
            {
                if(dis[num[j].b] < (dis[num[j].a] - num[j].c)*num[j].r)
                {
                    dis[num[j].b] = (dis[num[j].a] - num[j].c) * num[j].r;
                    flag = true;
                }
            }
            if(!flag)
                break;
        }
        //如果还能增加,则代表存在正环
        for(int j = 1; j <= 2 * m; j++)
        {
            if(dis[num[j].b] < (dis[num[j].a] - num[j].c) * num[j].r)
                return true;
        }
        return false;
    }
    int main()
    {
        while(cin >> n >> m >> s >> v)
        {
            for(int i = 1; i <= 2 * m; i += 2)
            {
                cin >> num[i].a >> num[i].b >> num[i].r >> num[i].c >> num[i + 1].r >> num[i + 1].c;
                num[i + 1].a = num[i].b;
                num[i + 1].b = num[i].a;
            }
            if(Bellman_Ford())
            {
                cout << "YES" << endl;
            }
            else
            {
                cout << "NO" << endl;
            }
        }
    }
  • 相关阅读:
    Python 集合
    Python 文字列
    JUNIT5(maven配置)
    Javascript严格模式
    移动互联测试
    Python的基础知识
    Linux系统下发件oa环境
    禅道的使用
    Linux系统的安装过程
    Oracle基础知识
  • 原文地址:https://www.cnblogs.com/yyaoling/p/12260416.html
Copyright © 2020-2023  润新知