首页 > 代码库 > poj 2240 Arbitrage
poj 2240 Arbitrage
题目链接:
http://poj.org/problem?id=2240
题目描述:
给n种货币,给m个货币间的汇率,问能不能通过货币之间的转化而获得利益,
解题思路:
由题意知,这个题不止求一条路径,所以最适合就是选择floyd去解决这个题目,判断map[i][i]有没有大于1的值
ps:floyd模板题目。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 using namespace std; 7 #define maxn 35 8 char name[maxn][maxn];//各种货币的名字 9 double map[maxn][maxn];//map[i][j]i-->j的汇率10 int n;11 12 void init ();13 int find (char str[]);14 void floyd ();15 16 int main ()17 {18 int m, i, j, k = 0;19 double s;20 char str1[maxn], str2[maxn];21 22 while (scanf ("%d", &n), n)23 {24 init();25 for (i=0; i<n; i++)26 scanf ("%s", name[i]);27 scanf ("%d", &m);28 while (m --)29 {30 scanf ("%s %lf %s", str1, &s, str2);31 int a = find (str1);32 int b = find (str2);33 map[a][b] = s;34 }35 floyd();36 m = 0;37 for (i=0; i<n; i++)38 if (map[i][i] > 1)39 m = 1;40 if ( m )41 printf ("Case %d: Yes\n", ++k);42 else43 printf ("Case %d: No\n", ++k);44 }45 return 0;46 }47 48 void init ()//初始化为一49 {50 int i, j;51 for (i=0; i<n; i++)52 for (j=0; j<n; j++)53 map[i][j] = 1;54 }55 int find (char str[])56 {57 int i;58 for (i=0; i<n; i++)59 if (!strcmp(name[i], str))60 return i;61 }62 void floyd ()63 {64 int i, j, k;65 for (i=0; i<n; i++)66 for (k=0; k<n; k++)67 for (j=0; j<n; j++)68 map[i][j] = max (map[i][j], map[i][k]*map[k][j]);69 }
poj 2240 Arbitrage
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。