hdu 1217 Arbitrage (floyd+map)
来源:互联网 发布:js连接mysql 编辑:程序博客网 时间:2024/05/22 06:49
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217
题意:一种货币可以根据汇率兑换成其他货币,问是否可以通过兑换来获利例如 1 US Dollar buys 0.5 British pound, 1 British pound buys 10.0 French francs, and 1
French franc buys 0.21 US dollar.那么1 US dollar and buy 0.5 * 10.0 * 0.21 = 1.05 US dollars;就可以把1美元换成1.05美元;
如果可以获利输出Case case: Yes否则Case case: No;
思考:一共有n种货币,对于每一种货币我们可以把它对应到一个整数i上;我们可以用c++的map来处理;
map<string,int> M;string s,t;for (int i=1;i<=n;i++){ cin>>s; M[s]=i;}for (int i=0;i<m;i++){ cin>>s>>val>>t; f[M[s]][M[t]] = val;}
</pre><pre>
我们可以先认为对于每一种货币 i 对于本身的汇率是1;考虑是否可以通过某一种货币 k 使得 从 i 兑换成 k ,然后再通过 k 兑换成 i;使得汇率增加;我们可以想到用floyd;只不过不是求最短路,而是求最大汇率;
<pre name="code" class="cpp">for (int k=1;k<=n;k++){ for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { if (f[i][j] < f[i][k]*f[k][j]) f[i][j] = f[i][k]*f[k][j]; } }}
对于初始化的问题要放在数据处理的开头;
我们要把f[i][i]赋值为1;这个要在读数据前完成,因为数据中有这样的情况:1 US Dollar buys 2 US Dollars;一开始我就是把数据初始化放在了读入的后面,忽略了这种情况;
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <map>using namespace std;double f[50][50];map<string,int> M;int main(){ int n,m,flag,cnt=1; double val; string s,t; while(scanf("%d",&n)!=EOF) { if(n==0) break; memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) f[i][i]=1.0; M.clear(); flag=0; for(int i=1;i<=n;i++) { cin>>s; M[s]=i; } scanf("%d",&m); for(int i=0;i<m;i++) { cin>>s>>val>>t; f[M[s]][M[t]]=val; } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][j] < f[i][k]*f[k][j]) f[i][j] = f[i][k]*f[k][j]; } } } for(int i=1;i<=n;i++) { if(f[i][i]>1.0) { flag=1; break; } } if(flag==1) printf("Case %d: Yes\n",cnt++); else printf("Case %d: No\n",cnt++); } return 0;}
0 0
- hdu 1217 Arbitrage (floyd+map)
- HDU 1217 Arbitrage 【Floyd + map】
- hdu 1217 Arbitrage(Floyd最短路算法+map应用)
- 文章标题 HDU 1217 : Arbitrage(最短路--Floyd+map)
- hdu 1217 Arbitrage (Floyd)
- hdu 1217Arbitrage(Floyd)
- HDU 1217 Arbitrage(floyd)
- (Floyd)【HDU 1217】Arbitrage
- Arbitrage(Floyd+map)
- hdu 1217 Arbitrage--Floyd
- hdu 1217 Arbitrage 【floyd】
- hdu 1217Arbitrage floyd
- hdu 1217 Arbitrage (Floyd)
- HDU 1217-Arbitrage(Floyd)
- 【hdu 】 Arbitrage (Floyd)
- hdu 1217 Arbitrage 最短路 floyd+map容器
- hdu 1217 Arbitrage (Floyd算法)
- HDU 1217 Arbitrage 货币交换(floyd)
- 学习总结
- Embedded C/C++(讲师)技术专家
- 货郎担(旅行售货商)动态规划
- 21个挑战题,几杯咖啡的时间,来试试
- 贪心算法详解
- hdu 1217 Arbitrage (floyd+map)
- IOS小知识点11之IOS文件结构、UIApplication
- 让你的javascript函数拥有记忆功能,减少全局变量的使用
- did you run git # update-server-info on the server?
- poj 1469 COURSES 二分图最大匹配
- VS 2012 NuGet错误
- 云计算与海量数据处理(技术专家)讲师
- cocos2dx 中的动作机制 动作在引擎中的行为
- 1+N问题