zoukankan      html  css  js  c++  java
  • poj 2240 Arbitrage (Floyd)


    题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率。
    如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 BritishPound。
    问在这N种货币中是否存在货币经过若干次兑换后,兑换成原来的货币能够使货币量添加。
    思路:本题事实上是Floyd的变形。将变换率作为构成图的路径的权值。只是构成的图是一个有向图。
    最后将松弛操作变换为:if(dis[i][j]<dis[i][k]*dis[k][j])。

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n,m,i,j,k,l,r,t=0;
        char s[35][30],s1[30],s2[30];
        double a[35][35],c;
        while(scanf("%d",&n)!=EOF){
            if(n==0)
                break;
            t++;
            memset(a,0,sizeof(a));         //開始都初始化为0了,而不是无穷大,当然能够初始化为无穷小
            for(i=1;i<=n;i++){
                scanf("%s",s[i]);
                a[i][i]=1.0;               //自己的税率初始化为1
            }
            scanf("%d",&m);
            while(m--){
                scanf("%s%lf%s",s1,&c,s2);
                l=r=0;
                for(i=1;i<=n;i++){
                    if(strcmp(s1,s[i])==0)            //存在自己对自己的兑换率,全部两个字符串可能相等
                        l=i;
                    if(strcmp(s2,s[i])==0)            //之前由于加了 else 将上述情况排除了,一直wa
                        r=i;
                    if(l&&r)
                        break;
                }
                a[l][r]=c;
            }
            for(k=1;k<=n;k++)                     //Floyd算法
                for(i=1;i<=n;i++)
                    for(j=1;j<=n;j++)
                        if(a[i][k]*a[k][j]>a[i][j])             //松弛条件
                            a[i][j]=a[i][k]*a[k][j];
            k=0;
            for(i=1;i<=n;i++)
                if(a[i][i]>1){                
                    k=1;
                    break;
                }
            if(k)
                printf("Case %d: Yes
    ",t);
            else
                printf("Case %d: No
    ",t);
        }
        return 0;
    }
    



  • 相关阅读:
    可以foreach的 必须继承IEnumable 接口才行
    .net 委托的用法
    匿名类的使用
    检测到有潜在危险的 Request.Form 值——ValidateRequest的使用
    IsPostBack用法
    Ajax 与 jquery
    好用的模板引擎NVelocity
    题解【AcWing275】[NOIP2008]传纸条
    题解【AcWing274】移动服务
    题解【AcWing271】杨老师的照相排列
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4053454.html
Copyright © 2011-2022 走看看