一、问题描述

套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定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”。

二、问题分析

(1)局部问题解决不了,因为当你一直选取汇率大的或者汇率小的转都不一定能转成最优。因此,这是涉及枚举所有情况的问题。即每次选择会和之前选择的情况相关,因此不能以一种固定的策略进行。

(2)考虑通项,从目标值而言,很明显是第i种货币转换成第j种货币的最优情况。

考虑转换方程,dp[i][j] = max(dp[i][k]*dp[k][j] , dp[i][j]);

即,flord模型,一直往路径i-j塞入点,使得i-j路径长度大于1,即可实现套汇。为什么会有这种想法?因为对于i-j 你可能经过i- i1 - i2 -j也可能i-i1-j对于通项不可能定义是dp[i][i1]...[j]将所有可能的中间点都放在通项中。

三、问题解决

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;
}

动态规划之套汇问题(思考分析、解决、算法模板)相关推荐

  1. 算法模板ACW(更新中)

    总目录: 基础算法 数据结构 搜索与图论 数学知识 动态规划 贪心 时空复杂度分析 基础算法 点我: link. 数据结构 点我: link. 搜索与图论 点我: link. 数学知识 点我: lin ...

  2. 高位数“火柴棒问题”的思考与解决

    高位数"火柴棒问题"的思考与解决 作者吴飞(本文为原创,转载和引用请注明江苏省镇江第一中学吴飞,并联系作者qq406457邮箱sinowufei@163.com) (江苏省镇江第一 ...

  3. leetcode 122. 买卖股票的最佳时机 II 思考分析

    目录 题目 贪心法 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时 ...

  4. leetcode 202. 快乐数 思考分析(哈希集合与双指针解)

    1.题目 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变 ...

  5. 程振波 算法设计与分析_算法设计与分析

    本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...

  6. 计算机算法设计与分析教学大纲,算法设计与分析的教与学(教学大纲)

    原标题:算法设计与分析的教与学(教学大纲) 课程代码:**** 课程负责人: **** 课程中文名称:算法设计与分析 课程英文名称:Designand Analysis of Algorithms 课 ...

  7. java面试宝典 之 物流配送路径优化问题分析与算法解读

    物流配送路径优化问题分析与算法解读(一)         去年五一跳蚤以后,一直在一家公司参与物流配送软件开发的相关工作,负责的工作内容包括物流配送路径优化这一块.关于物流配送这一专业领域,自己以前也 ...

  8. leetcode 322. 零钱兑换 思考分析

    目录 1.题目 2.思路分析 3.参考链接 1.题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...

  9. leetcode 491. 递增子序列 思考分析

    题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 说明: 给定数组的长度不会超过15. 数组中的整数范围是 [-100,100]. 给定数组中可能包含重复数字 ...

  10. LeetCode 101. 对称二叉树 思考分析

    题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null ...

最新文章

  1. 小程序添加动画效果--遇到的问题
  2. Spark学习之概念了解
  3. 阮一峰react demo代码研究的学习笔记 - demo7 debug - create ref element
  4. VS2010 C++下编译调试MongoDB“.NET研究”源码
  5. linux终端常用命令和windows终端常用命令对比
  6. grub shell 错误_使用grub-install修复Grub时出错
  7. python绘制三维图散点图_python matplotlib模块——绘制三维图形、三维数据散点图...
  8. 和yupeng的讨论
  9. jQuery Tips(5)----关于伪类选择符
  10. 解决Ionic的ion-slide-box 2条数据渲染问题
  11. C++ string , int 之间相互转换
  12. BZOJ 1036 [ZJOI2008]树的统计Count (树链剖分 - 点权剖分 - 单点权修改)
  13. 由先序遍历序列和中序遍历序列恢复二叉树以及统计叶子节点个数和树的深度...
  14. 【更新】PDF控件Spire.PDF 3.9.568发布 | 附下载
  15. HTML页面跳转的5种方法分析介绍
  16. 关于C#项目开发梳理
  17. 【中文树库标记---CTB】
  18. Java程序员学习Rust编程
  19. IOS开发入门之二——第一个App
  20. 商城后台添加多规格属性

热门文章

  1. leftaxis 安卓_3 Axis Gimbal
  2. 精品绿色便携软件下载站
  3. 少有人走的路1推迟满足感
  4. 用Java实现矩阵乘法
  5. Automa实现PowerBI大屏滚动播放
  6. 图数据库在中国移动金融风控的落地应用
  7. 富士康需要感恩苹果吗?
  8. 使用Sandcastle 基于代码注释生成接口文档
  9. 今日学习感悟(Java)
  10. JAVA中小数为什么不精确