题目描述

套利是利用货币汇率差异将一种货币单位转换成一种以上相同货币单位。例如,假设1美元买入0.5英镑,1英镑买入10.0法国法郎,1法国法郎买入0.21美元。然后,通过转换货币,聪明的交易者可以从1美元开始,买入0.5 * 10.0 * 0.21 = 1.05美元,获利5%。
您的工作是编写一个程序,该程序将货币汇率列表作为输入,然后确定是否可以进行套利。

输入

第一行中,有一个整数n(1 <= n <= 30),代表不同货币的数量。
      接下来的n行分别包含一种货币的名称。名称中不会出现空格(货币名称可能会重复)
       下一行包含一个整数m,代表要遵循的表的长度。最后m行分别包含源货币的名称ci,

代表ci到cj的汇率的实数rij和目标货币的名称cj。没有出现在表中的交换是不可能的

(可能存在同币种不同汇率情况,保留汇率高的情况)

输出

yes或no的格式打印一行,说明是否可以套利。

样例输入

3
USDollar
BritishPound
FrenchFranc
3
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar

样例输出

yes

算法:弗洛伊德

弗洛伊德:

弗洛伊德Floyd算法 ,是用来求所有顶点到所有顶点的最短路径。

我们可以直接对每个顶点通过迪杰斯特拉算法求得所有的 顶点到所有顶点的最短路径,为什么还要弗洛伊德算法?

弗洛伊德算法-动态规划思想

定义状态,划分阶段

1、我们设 d[k][i][j] 为除了 i 和 j 外只经过前 k 个结点,从 i 到 j 的最短路。

2、显然可以知道 d[0][i][j]=w[i][j]

3、那么当加入了一个顶点k之后,最短路如果有变化的话一定是以k为中间顶点, 那么可以得到: d[k][i][j] = min(d[k−1][i][j],d[k−1][i][k] +d[k−1][k][j])

4、这个算法的复杂度是O(|V|3)

最优子结构

最短路径的子路径仍然是最短路径,最优子结构可以保证

最短路径的子路径仍然是最短路径,最优子结构可以保证。

1、比如一条从a到e的最短路a->b->c->d->e

2、那么 a->b->c 一定是a到c的最短路c->d->e一定是c到e的最短路

3、如果说一条最短路必须要经过点k,那么i->k的最短路加上k->j的最短路 一定是i->j 经过k的最短路

无后效性

状态d[k][i][j]由d[k-1][i][j],d[k-1][i][k] 以及d[k-1][k][j]转移过来

很容易可以看出d[k] 的状态完全由d[k-1]转移过来,只要把k放到最外 层循环中,就能保证无后效性。

状态d[k][i][j]由d[k-1][i][j],d[k-1][i][k] 以及d[k-1][k][j]转移过来

已经知道:

d[k-1][i][j]: 节点i到j点经过点k-1最短路

d[k-1][i][k]:节点i到k点经过点k-1最短路径

d[k-1][k][j]: 节点k到j点经过点k-1最短路径

可得到:d[k][i][j] = min(d[k−1][i][j],d[k−1][i][k] +d[k−1][k][j])

弗洛伊德Floyd算法

一般用邻接矩阵存图(n比较小)

核心代码

for(int k=1;k<=n;k++) {

for(int i=1;i<=n;i++) {

for(int j=1;j<=n;j++) {

if(i!=j&&i!=k&&j!=k) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);

}

}

}

K必须在最外层,保证动态规划的无后效性,i和j无所谓。

d[i][j]的最大值用0x3f3f3f3

代码:

#include <bits/stdc++.h>

using namespace std;

map<string,int> mp;

int n,m,ct;

string str,str1,str2;

double x,a[100][100];

void addEdge(string str1,double x,string str2){

    string s1=str1;

    string s2=str2;

    int u,v;

    u=mp[s1];

    v=mp[s2];

    if(a[u][v]<x&&u!=v) a[u][v]=x;

}

bool floyd(){

    for(int k=1;k<=n;k++){

        for(int i=1;i<=n;i++){

            for(int j=1;j<=n;j++){

                if(a[i][j]<a[i][k]*a[k][j]){

                    a[i][j]=a[i][k]*a[k][j];

                }

            }

        }

    }

    for(int i=1;i<=n;i++){

        if(a[i][i]>1) return true;

    }

    return false;

}

int main(){

    cin>>n;

    for(int i=1;i<=n;i++){

        a[i][i]=1;

    }

    for(int i=1;i<=n;i++){

        cin>>str;

        mp[str]=++ct;

    }

    cin>>m;

    for(int i=0;i<m;i++){

        cin>>str1>>x>>str2;

        addEdge(str1,x,str2);

    }

    if(floyd()) cout<<"yes";

    else cout<<"no"<<endl;

    return 0;

}

套利[题目][j2]相关推荐

  1. 一套有趣的期权套利题目

    一套有趣的期权套利题目 – 潘登同学的金融经济学笔记 文章目录 一套有趣的期权套利题目 -- 潘登同学的金融经济学笔记 来源 出题人给出的解法 我的解法 来源 前几天在刷视频的时候,发现了这样一道题 ...

  2. 【渝粤题库】广东开放大学 金融经济学 形成性考核

    选择题 题目:(        )理论认为,现实中的个体和企业经理人面临着风险或不确定性. 答案: A.计量经济学 B.微观经济学 C.宏观经济学 D.金融经济学 题目:以下不属于个体可用的融资工具是 ...

  3. CCF 2015年题目题解 - Python

    2015年刷题目录 2015年12月 201512-1 数位之和 题目链接: 代码: 201512-2 消除类游戏 题目链接: 代码: 易错点需注意点:注意and前后都为真时结果返回第二个值. 201 ...

  4. cc2530期末试卷_ZigBee应用技术答案试题题目及答案,期末考试题库,章节测验答案...

    ZigBee应用技术答案试题题目及答案,期末考试题库,章节测验答案 更多相关问题 [判断题] 期现套利与现货并没有实质性联系,现货风险对它们而言无关紧要.()[多选] 历史模拟法在计算VaR时具有() ...

  5. LeetCode面试必刷题目总结 持续更新中...

    说明 文章源地址:sanzo.top/#/post/算法与数据结构/算法题 多数元素 题目链接 找到数组中众数(出现次数>⌊n2⌋>\lfloor\frac{n}{2}\rfloor> ...

  6. c语言float输出分数,c语言同一题目求解结果用float和int输出值差1.

    c语言同一题目求解结果用float和int输出值差1. 答案:3  信息版本:手机版 解决时间 2018-12-08 22:35 已解决 2018-12-08 05:38 c语言同一题目求解结果用fl ...

  7. 牛客网 【每日一题】7月27日题目精讲—乌龟棋

    来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...

  8. c语言中不带任何修饰符的浮点变量,江苏省计算机等级考试二级C语言笔试辅导题目...

    <江苏省计算机等级考试二级C语言笔试辅导题目>由会员分享,可在线阅读,更多相关<江苏省计算机等级考试二级C语言笔试辅导题目(155页珍藏版)>请在装配图网上搜索. 1.1 江苏 ...

  9. 题目1452:搬寝室(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

最新文章

  1. 面向对象之this与super
  2. Python单元测试框架 unittest详解
  3. 异步请求(简单一说)
  4. springboot 优雅停机_新姿势,Spring Boot 2.3.0 如何优雅停机?
  5. 第28天:js-Tab栏切换封装函数
  6. 拿下“[warn] (OS 64)指定的网络名不再可用”错误
  7. jquery文档加载完毕后执行的几种写法
  8. gin 项目结构_Go Web 框架 Gin 路由的学习
  9. 模板方法设计模式(未完待续)
  10. 使用docker安装设置oracle
  11. pytorch学习笔记(十五):模型构造
  12. Unity 2D教程: 滚动,场景和音效
  13. openstack trove实例状态转换条件--Mitaka版本
  14. java连接DB2数据库
  15. php完整系统由哪几部分,一个完整的物联网系统由哪些部分组成,各有什么功能?...
  16. 关于selenium配置Chrome驱动(Windows系统)
  17. iOS9 未受信任的企业级开发者
  18. BZOJ4223 : Tourists
  19. Word文档封面填写打字时字体下方出现空格如何解决
  20. 【数据结构——哈夫曼树及其应用】

热门文章

  1. [论文翻译]据传比MTCCN的FaceBoxes《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》
  2. 探索有趣的微观世界:微生物的种类、生存、应用
  3. android 电池权限,Android M及以上提示用户将APP加入电池优化白名单
  4. ADP-L610-Arduino
  5. Scout - 可扩展的服务器和应用监控服务
  6. CSO是什么?这家年增长48%的企业级软件公司告诉你
  7. metasploit中用shodan模块进行网络摄像头查找
  8. 手把手带你从0开始搭建个人网站,小白可懂的保姆级教程
  9. php curl登录,php curl实现第三方帐号登录
  10. JAVA编程基础实验