zoukankan      html  css  js  c++  java
  • Arbitrage(套利)

    poj 2240

    题目大意:给出不同的货币,然后是一种对另一种的兑换比率,若从一种货币,经过若干次兑换又换回本身,原来是1元,回来时比一元多,就输出Yes 否则输出No

    解决:floyd算法

    #include <iostream>
    #include <string>
    
    using namespace std;
    const int N=35;
    double cost[N][N];
    
    int n;
    void init()
    {
       for(int i=0;i<n;i++)
         for(int j=0;j<n;j++)
         if(i==j)cost[i][j]=1.0;
         else cost[i][j]=0.0;
          
    }
    void floyd()
    {
        int i,j,k;
        for( k=0;k<n;k++)
          for( i=0;i<n;i++)
             for( j=0;j<n;j++)
             if(cost[i][j]<cost[i][k]*cost[k][j])
              cost[i][j]=cost[i][k]*cost[k][j];
        for( i=0;i<n;i++)
         if(cost[i][i]>1){cout<<"Yes"<<endl;return;}
        if(i==n)cout<<"No"<<endl;      
     
    
    }
    int main()
    {
        int m,i,icase=1;
        string a,b;
        double r;
        while(cin>>n,n)
        {
            init();
            string kind[N];
            for(i=0;i<n;i++)
                cin>>kind[i];
            cin>>m;
            while(m--)
            {
                cin>>a>>r>>b;
                int beg=-1,end=-1;
                for(i=0;i<n && beg==-1 || end==-1;i++)
                {
                    if(kind[i]==a)beg=i;
                    if(kind[i]==b)end=i;
                }
                cost[beg][end]=r;
            }
            cout<<"Case "<<icase++<<": ";
            floyd();    
        }    
        system("pause");
        return 0;
    }
    

    本算法与初始化的时候有很大关系若用一下方法初始化应为

    void init()
    {
       for(int i=0;i<n;i++)
         for(int j=0;j<n;j++)
          cost[i][j]=-1;
    }
    void floyd()
    {
        int i,j,k;
        for( k=0;k<n;k++)
          for( i=0;i<n;i++)
             for( j=0;j<n;j++)
             //必须判断边存在与否
    if(cost[i][k]!=-1 && cost[k][j]!=-1 && cost[i][j]<cost[i][k]*cost[k][j]) cost[i][j]=cost[i][k]*cost[k][j]; for( i=0;i<n;i++) if(cost[i][i]>1){cout<<"Yes"<<endl;return;} if(i==n)cout<<"No"<<endl; }

  • 相关阅读:
    半截水晶头线接激活本地虚拟网卡
    快捷键
    嵌入式系统原理与应用技术(第三版)-读书笔记
    嵌入式基本常识(一)
    PWM输出
    ARM-GPIO
    POI使用
    oracle常见命令
    JS获取contextPath的方法
    JPA自动生成表
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2142874.html
Copyright © 2011-2022 走看看