UVA_104_Arbitrage
2016-04-08 16:13
309 查看
#include<iostream> #include<sstream> #include<string> #include<vector> #include<list> #include<set> #include<map> #include<stack> #include<queue> #include<algorithm> #include<cmath> #pragma warning(disable:4996) using std::cin; using std::cout; using std::endl; using std::stringstream; using std::string; using std::vector; using std::list; using std::pair; using std::set; using std::multiset; using std::map; using std::multimap; using std::stack; using std::queue; void print(int i, int j, int step,const vector<vector<vector<double>>>&path) { if (step == 0) { cout << i; return; } print(i, path[i][j][step], step - 1,path); cout << ' ' << j; return; } void floyd_warshall(vector<vector<vector<double>>>&coin, vector<vector<vector<double>>>&path) { int step, m; int n = coin.size()-1; for (step = 2; step <= n; step++) { for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (coin[i][j][step] < coin[i][k][step - 1] * coin[k][j][1]) { coin[i][j][step] = coin[i][k][step - 1] * coin[k][j][1]; path[i][j][step] = k; } } } } int i; for (i = 1; i <= n; i++) { if (coin[i][i][step] > 1.01) { m = i; break; } } if (i <= n) { break; } } if (step > n) { cout << "no arbitrage sequence exists"; } else { print(m, m, step,path); } cout << endl; } int main() { freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int n; while (cin>>n) { vector<vector<vector<double>>>coin(n+1,vector<vector<double>>(n+1,vector<double>(n+1))); vector<vector<vector<double>>>path(n+1, vector<vector<double>>(n+1, vector<double>(n+1))); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (i == j) { coin[i][j][1] = 1; } else { cin >> coin[i][j][1]; } path[i][j][1] = j; } floyd_warshall(coin,path); } return 0; }
相关文章推荐
- 欧拉环、欧拉路径的判定和求法
- 面试问题,将字符串、字符串单词倒叙输出
- 泛型依赖注入
- WKNavigationDelegate调用的顺序
- Hadoop和spark通信机制
- 在竞赛ACM Java处理输入输出
- linux下安装mongodb3.2.4
- 数组分段查找
- css 相对电脑窗口定位
- Service详解(五):使用Messager进行通信
- 【笔记】 《js权威指南》- 第17章 事件处理 - 17.2 - 17.3
- C语言之数组冒泡排序方法(学习之路)
- C++之运算符重载
- MySql远程不能登录问题解决办法
- 两个一维数组合并为对应的二维数组(array_merge_recursive)
- Netty1——概况
- Tomcat eclipse 启动时一个工程影响另一个工程
- 如何选择加密芯片?
- 如何选择加密芯片?
- 如何选择加密芯片?