zoukankan      html  css  js  c++  java
  • 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
    ", ++k);
    42         else
    43             printf ("Case %d: No
    ", ++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 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    hdoj2159【二位费用背包】
    POJ2367【拓扑排序】
    POJ2371【水题】
    POJ2369【循环节】
    POJ2370【水题】
    POJ2365【几何】
    POJ2366【二分】
    POJ1276【多重背包】
    瞎说一波3种基本背包问题【希望巨巨们指出错误】
    Codeforces 550B 【暴力】
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4224664.html
Copyright © 2011-2022 走看看