zoukankan      html  css  js  c++  java
  • poj2240

    题意:给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值。

    分析:根据输入建立有向图,不能使用dijaskra,因为增值的方法不一定是优先选择最小的路径,并不是贪心所能解决的。所以要用以动态规划为基本思想的floyd来做。

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    const    int        maxn = 31;
    
    struct edge
    {
        int        x;
        double    l;
        edge(int xx, double ll):x(xx),l(ll)
        {}
    };
    
    string    names[maxn];
    int        n, m;
    double    map[maxn][maxn];
    bool    found;
    
    int getid(string &a)
    {
        int        i;
    
        for (i = 0; i < n; i++)
            if (a == names[i])
                return i;
        return 0;
    }
    
    void init()
    {
        int        i;
        string    name1, name2;
        double    l;
    
        getchar();
        for (i = 0; i < n; i++)
        {
            cin >> names[i];
            map[i][i] = 1;
            getchar();
        }
        scanf("%d", &m);
        getchar();
        for (i = 0; i < m; i++)
        {
            cin >> name1;
            cin >> l;
            cin >> name2;
            map[getid(name1)][getid(name2)]=l;
        }
    }
    
    void floyd()
    {
        int        i, j, k;
    
        found = false;
        for (k = 0; k < n; k++)
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                    if (map[i][j] < map[i][k] * map[k][j])
                        map[i][j] = map[i][k] * map[k][j];
        for (i = 0; i < n; i++)
            if (map[i][i] > 1)
            {
                found = true;
                break;
            }
    }
    
    int main()
    {
        int        t = 0;
    
        //freopen("t.txt", "r", stdin);
        while (cin >> n && n != 0)
        {
            init();
            found = false;
            printf("Case %d: ", ++t);
            floyd();
            if (found)
                printf("Yes\n");
            else
                printf("No\n");
        }
        return 0;
    }
  • 相关阅读:
    java实现快速排序
    java实现简单回文算法
    HTML条件注释
    LeetCode 将有序数组转换为二叉搜索树
    LeetCode 有效的数独
    Leetcode 买卖股票的最佳时机 II
    模拟登陆163邮箱
    oracle 视图的相关操作
    oracle 约束类别
    软件测试用例知识点梳理
  • 原文地址:https://www.cnblogs.com/rainydays/p/1948666.html
Copyright © 2011-2022 走看看