http://acm.hdu.edu.cn/showproblem.php?pid=1217
题意:给出各种钱之间的兑换机制,求不断兑换后是否可以产生利润?
对于第一个案例:start with 1 US dollar and buy 0.5 * 10.0 * 0.21 = 1.05 US dollars, making a profit of 5 percent
Sample Input
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
Sample Output
Case 1: Yes
Case 2: No
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <utility>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
//#include <ctime>
#include <ctype.h>
using namespace std;
#define L long long
#define inf 0x3fffffff
#define M 1005
map<string, int> m; //映射
double mon[35][35];
int main()
{
double x;
int n, i, k, j, cc = 1;
string s, p;
while (cin >> n, n)
{
for (i = 0; i < n; i++)
{
cin >> s;
m[s] = i; //把string映射为[0,n-1]的编号
}
cin >> k;
memset (mon, 0, sizeof(mon)); //初始化
while (k--)
{
cin >> s >> x >> p;
mon[m[s]][m[p]] = x; //从s号变为p号要乘以x
}
/*****************floyd神器*****************/
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < n; k++) //floyd-构造所有情况的神器
if (mon[j][k] < mon[j][i] * mon[i][k])
//就像路径,从j到k可以由j到i再到k
mon[j][k] = mon[j][i] * mon[i][k]; //更新,所谓的松弛技术
/*****************floyd神器*****************/
for (i = 0; i < n; i++)
if (mon[i][i] > 1.0) //经过变换后>1.0说明获得利润
break;
printf ("Case %d: ", cc++);
if (i < n)
puts ("Yes");
else puts ("No");
}
return 0;
}
分享到:
相关推荐
【标题】"POJ2240-Arbitrage【Floyd】" 是一个编程竞赛题目,来源于北京大学的在线评测系统POJ(Problem Online Judge)。该题目主要涉及到图论中的Floyd-Warshall算法,是一种解决多源最短路径问题的方法。 【描述...
中国数学建模-数学工具-Floyd最短路算法的MATLAB程序 wh-ee 重登录 隐身 用户控制面板 搜索 风格 论坛状态 论坛展区 社区服务 社区休闲 网站首页 退出 >> Matlab,Mathematica,maple,几何画板,word,sas,spss......
**Floyd最短路径算法详解** Floyd-Warshall算法是一种经典的解决图中所有顶点对最短路径问题的算法,由美国计算机科学家Robert W. Floyd于1962年提出。该算法的核心思想是逐步考虑更多的中间节点,通过动态规划的...
**Floyd算法** Floyd算法,也称为Floyd-Warshall算法,是图论中用于查找有向图或无向图中所有顶点之间最短路径的一种经典算法。该算法由Robert Floyd在1962年提出,适用于解决多源最短路径问题,即寻找从图中的一个...
4. **图论算法**:最短路径算法(Dijkstra、Floyd-Warshall)、拓扑排序、最小生成树(Prim、Kruskal)等。 5. **数学方法**:模运算、数论、组合数学等。 6. **字符串处理**:KMP匹配、Z算法、后缀数组、AC自动机等...
"Floyd_路径规划_Floyd算法_dynamicdijkstra"这一主题主要涵盖了计算机科学中的路径规划问题,特别是Floyd算法的运用以及与Dijkstra算法的比较。本文将深入探讨Floyd算法的核心思想、实现过程、适用场景以及它与动态...
Floyd算法,也称为Floyd-Warshall算法,是解决图中所有顶点对之间最短路径问题的一种经典算法。在这个“floyd_matlab_”压缩包中,我们看到的是使用MATLAB语言实现的Floyd算法。 MATLAB是一种高级的数值计算和符号...
基于MATLAB的Floyd算法,计算网络中任意结点间的最小距离!
**Floyd最短路径算法详解** Floyd-Warshall算法,通常称为Floyd算法,是图论中的一个著名算法,用于解决多源最短路径问题。这个算法由Robert Floyd在1962年提出,其核心思想是通过迭代的方式逐步完善最短路径信息,...
**Floyd算法详解** Floyd算法,也被称为Floyd-Warshall算法,是图论中的一个经典算法,主要用于解决在加权图中寻找任意两个顶点之间的最短路径问题。这个算法是由美国计算机科学家Robert W. Floyd提出的,因此得名...
Floyd-Warshall算法,通常简称为Floyd算法,是解决这一问题的有效方法之一。该算法由Robert Floyd和Stephen Warshall分别独立提出,因此得名。在本篇中,我们将深入探讨Floyd算法的基本原理、实现过程以及它在实际...
利用误差扩散算法中的Floyd-Steinberg抖动算法来对图像进行二值化处理,从而方便图像调频加网输出Floyd-Steinberg
**Floyd算法详解** Floyd算法,又称为Floyd-Warshall算法,是解决图论中最短路径问题的一种经典算法。该算法的核心思想是通过动态规划的方法,逐步更新图中所有节点之间的最短路径,最终得到任意两个节点间的最短...
本代码是floyd算法的通用matlab程序,代码写的十分经典,是数模比赛的利器
使用c++,调用mpi进行floyd并向计算
Floyd算法,又称为Floyd-Warshall算法,是解决图论中的最短路径问题的一种经典方法。在计算机科学中,特别是在算法设计领域,它被广泛应用于网络路由和行程规划。C语言作为基础的编程语言,是实现这种算法的理想选择...
**Floyd最短路径算法详解** Floyd-Warshall算法,通常简称为Floyd算法,是一种在图中寻找所有顶点对之间最短路径的有效算法。由Robert W. Floyd于1962年提出,该算法的核心思想是通过动态规划逐步增加中间节点,以...
**算法-最短路径-Floyd算法** 在计算机科学中,最短路径问题是一个经典的问题,尤其是在图论和网络分析中。Floyd-Warshall算法,通常简称为Floyd算法,是一种用于解决所有对之间最短路径问题的有效算法。由Robert W...
Floyd算法,也被称为Floyd-Warshall算法,是图论中的一个重要算法,主要用于求解图中所有顶点之间的最短路径。这个算法由Robert Floyd和Stephen Warshall独立提出,因此得名。在计算机科学中,它常被用于解决网络...
floyd算法m文件