poj2240 - Arbitrage
想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:可以简单描述为知道从i到j的汇率,问能不能赚钱
解题思路:问能不能赚钱,就是当i到i初始是t时,从i到i的最长路径能不能大于t,如果有这样的情况就是能赚钱
/*
floyd
Memory 196K
Time 47MS
*/
#include <iostream>
#include <string.h>
using namespace std;
#define MAXC 100
#define MAXV 50
double map[MAXV][MAXV];
int n,m;
void Input(){
char s[MAXV][MAXC],a[MAXC],b[MAXC];
int i,k,j;
double c;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
if(i==j)
map[i][j]=1;
else
map[i][i]=0;
for(i=1;i<=n;i++) scanf("%s",s[i]);
scanf("%d\n",&m);
for(i=1;i<=m;i++){
scanf("%s %lf %s",a,&c,b);
for(j=1;j<=n;j++)
if(!strcmp(s[j],a)) break;
for(k=1;k<=n;k++)
if(!strcmp(s[k],b)) break;
map[j][k]=c;
}
}
void floyd(){
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(map[i][k]*map[k][j]>map[i][j])
map[i][j]=map[i][k]*map[k][j];
}
int main(){
int cas=1,i;
while(scanf("%d\n",&n) && n){
Input();
floyd();
printf("Case %d: ",cas++);
for(i=1;i<=n;i++)
if(map[i][i]>1) break;
if(i>n) printf("No\n");
else printf("Yes\n");
}
return 0;
}
===========================================================================================
/*
bellman-ford
Memory 196K
Time 47MS
*/
#include <iostream>
#include <string.h>
using namespace std;
#define MAXC 100
#define MAXV 50
#define MAXM 10000
typedef struct{
int a,b;
double rate;
}Edge;
Edge edge[MAXM];
int n,m;
void Input(){
char s[MAXV][MAXC],a[MAXC],b[MAXC];
int i,k,j;
for(i=1;i<=n;i++) scanf("%s",s[i]);
scanf("%d\n",&m);
for(i=1;i<=m;i++){
scanf("%s %lf %s",a,&edge[i].rate,b);
for(j=1;j<=n;j++)
if(!strcmp(s[j],a)) break;
for(k=1;k<=n;k++)
if(!strcmp(s[k],b)) break;
edge[i].a=j;
edge[i].b=k;
}
}
int bellman_ford(){
int i,j;
double d[MAXV];
for(i=1;i<=n;i++) d[i]=0;
d[1]=1;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
if(d[edge[j].a]*edge[j].rate>d[edge[j].b])
d[edge[j].b]=d[edge[j].a]*edge[j].rate;
}
for(j=1;j<=m;j++)
if(d[edge[j].a]*edge[j].rate>d[edge[j].b])
return 1;
return 0;
}
int main(){
int cas=1,i;
while(scanf("%d\n",&n) && n){
Input();
printf("Case %d: ",cas++);
if(!bellman_ford()) printf("No\n");
else printf("Yes\n");
}
return 0;
}
poj2240 - Arbitrage相关推荐
- 一步一步深入理解Dijkstra算法
先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...
- I - Arbitrage POJ - 2240
I - Arbitrage POJ - 2240 题意: 利用汇率之间的差价判断是否可以赚钱 思路: 利用 spfa 跑最长路(即松弛条件改为取更大的值),判断是否存在正环,存在则可以赚钱 #incl ...
- Arbitrage——判断正环Bellman-Ford/SPFA
[题目描述] Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a c ...
- HDU 1217 Arbitrage (Floyd + SPFA判环)
题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...
- Arbitrage(判断正环 spfa写法)
题目如下: Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a cu ...
- POJ 2240 Arbitrage(SPFA判正环)
POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...
- I - Arbitrage(判断是否有无正环 II)
题目描述 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a cur ...
- HDOJ 题目1217 Arbitrage(最短路径,Floyd)
NEW~ 关于举办计算机学院大学生程序设计竞赛(2014'11)的报名通知 Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- 统计套利 Statistical arbitrage
统计套利 Statistical arbitrage 不是绝对意义上的套利, 而是统计意义上的套利,即该策略期望上可套利,但不 一定能套利. From Wikipedia, the free enc ...
最新文章
- 打开和关闭mysql服务的两种方法
- Java定义一维数组从键盘赋值
- MSRCRGIMP(基于GIMP版本的多尺度Retinex)
- hibernate 基础方法(二)【相关配置详解】
- 《Android 应用案例开发大全(第3版)》——第1.2节掀起Android的盖头来
- php 股票数据 sina,使用Sina API获取新浪财经的证券股票数据接口(时价 K线等)
- ArcFace算法笔记
- 最好用的WIN7WIN10激活工具
- 手势识别(一)--手势基本概念和ChaLearn Gesture Challenge
- 求生之路无限火力服务器,《求生之路》终于数3了?还没开测就已经卖疯了……...
- Directx11教程(58) 鼠标控制摄像机
- 站内文案编辑seo关键词优化技巧
- Linux基本操作1
- 中国分电器及点火线圈市场现状研究分析与发展前景预测报告(2022)
- qt QLabel设置行间距
- 在线聊天室的消息单聊的实现——springboot整合WebSocket(二)
- Win98 is gone
- 2022年备考考研英语二作文
- windows7下安装ACHI驱动
- 武汉计算机学校排名及分数线,湖北省专科学校排名及分数线2019