套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,且1 法郎可以买到0.16美元。通过货币兑换,一个商人可以从1 美元开始买入,得到0.7×9.5×0.16=1.064美元,从而获得6.4%的利润。 给定n 种货币c1 ,c2 ,... ,cn的有关兑换率,试设计一个有效算法,用以确定是否存在套汇的可能性。

输入
含多个测试数据项。每个测试数据项的第一行中只有1 个整数n (1< =n< =30),表示货币总数。其后n行给出n种货币的名称。接下来的一行中 有1 个整数m,表示有m种不同的货币兑换率。其后m行给出m种不同的货币兑换率,每行有3 个数据项ci , rij 和cj ,表示货币ci 和cj的兑换率为 rij。文件最后以数字0 结束。

输出
对每个测试数据项j,如果存在套汇的可能性则输出“Case j Yes”, 否则输出“Case j No”。

样例输入
3
USDollar
BritishPound
FrenchFranc
3
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar

3
USDollar
BritishPound
FrenchFranc
6
USDollar 0.5 BritishPound
USDollar 4.9 FrenchFranc
BritishPound 10.0 FrenchFranc
BritishPound 1.99 USDollar
FrenchFranc 0.09 BritishPound
FrenchFranc 0.19 USDollar
0
样例输出
Case 1 Yes
Case 2 No
对Floyd算法的简单应用,代码如下:

#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
#include<utility>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX 45
double path[MAX][MAX];
map<string,int>ratemap;
bool Floyd(int n)
{for(int k=0;k<n;k++){for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(path[i][j]<path[i][k]*path[k][j])   //关键点path[i][j]=path[i][k]*path[k][j];}}}for(int i=0;i<n;i++){if(path[i][i]>1)return true;}return false;
}
int main()
{int n,m,count=1;string nameA,nameB,name;double rate;while(cin>>n&&n){memset(path,0,sizeof(path));for(int i=0;i<n;i++){cin>>name;pair<string,int>a(name,i);   //使用map结构可以直接得到该货币的索引ratemap.insert(a);path[i][i]=1;}cin>>m;for(int i=0;i<m;i++){cin>>nameA>>rate>>nameB;path[ratemap[nameA]][ratemap[nameB]]=rate;}if(Floyd(n)) cout<<"Case "<<count<<" Yes"<<endl;else cout<<"Case "<<count<<" No"<<endl;count++;ratemap.clear();
}
return 0;
}

转载:https://blog.csdn.net/qq_36793206/article/details/80841306?utm_source=copy

【动态规划】套汇问题(Floyd算法)相关推荐

  1. 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解

     本文链接   :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...

  2. Floyd算法的动态规划本质

    Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的 ...

  3. floyd算法和动态规划

    楔子 long long ago就已经知道了Floyd算法,关键代码就4行,也容易记住,上上周又看到了Floyd,都说是动态规划,所以特意去学了一圈动态规划,今天终于又回到了它 状态方程: d[k][ ...

  4. 动态规划 - Floyd算法求最短路径 - (Matlab建模)

    Floyd算法又称为弗洛伊德算法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

  5. 探求Floyd算法的动态规划本质

    Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的 ...

  6. 货币套汇(图路径)-- 数据结构 (深搜+Floyd算法)

    深搜+Floyd算法 深搜 Floyd算法 题目描述 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币. 例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5法郎,1 ...

  7. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法

    一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...

  8. 【图论专题】Floyd算法及其扩展应用

    Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...

  9. 图的单源最短路径,Floyd算法(数据结构c++)

    这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...

最新文章

  1. tf.contrib.layers.fully_connected详解
  2. wxpython 内嵌字体_【wxPython】wx.font类字体
  3. PAT 1041. 考试座位号(15)
  4. 讨厌别人不写注释,但自己也不爱写?那么试试这个IDEA的注释插件吧!
  5. 7、LIKE:模糊查询
  6. 【转载】解决Windows和Ubuntu时间不一致的问题
  7. flink面试题(需要逐个突破)
  8. 常用文献管理软件使用经验
  9. idea main scanner 输入_哇晒,你竟然不知道idea的 Live Templates
  10. python画饼图存在的问题_Matplotlib 绘制饼图解决文字重叠的方法
  11. mysql sql注入工具_基础篇——SQL注入(工具注入)
  12. shaderop的定义
  13. Android TextView设置多样式文本,跑马灯以及霓虹灯效果
  14. 如何共享计算机磁盘,扩展群集共享磁盘的分区 - Windows Server | Microsoft Docs
  15. linux系统可以装win10吗,如何在Win10专业版中安装Linux系统?
  16. 又到一年清明时,又是一年踏春季
  17. 2018-2019-1 20165320 《信息安全系统设计基础》 缓冲区溢出漏洞实验
  18. 下载jar源码时,出现:cannt not download source Sources not found for
  19. dns被劫持怎么办,DNS被劫持了有什么解决办法?
  20. pip install报错 There was a problem confirming the ssl certificate…

热门文章

  1. Security配置
  2. 关于仓储规划的内容,太全了!忍不住收藏(干货)
  3. 洛谷1007——独木桥
  4. sqlServer 开启CDC
  5. 5.20下周黄金行情走势分析及开盘独家交易策略
  6. fsetpos()详解
  7. LeetCode刷题(61)~找出数组中的幸运数
  8. 金发男孩 fair-haired boy
  9. 【Unity】超级坦克大战(七)选择关卡界面
  10. 什么是带有SSCC的DESADV?