文档章节

UVA 104 - Arbitrage

aqia358
 aqia358
发布于 2014/06/04 15:24
字数 500
阅读 64
收藏 0

这道题的题意是:给出n种国家的货币汇率,一定金额的某种货币经过一系列汇率变换后再换成原来货币,金额增加了,求出这样的一个变换,要求变换步数最少。

由于数据量不大,我们可以直接用动规+floyd解决,设f[p][i][j]为由i到j经过p次转换所能达到的最大汇率乘积,每循环一次p我们就扫描一遍f[p][i][i],如果有大于1的情况就直接打印结果即可。

    在记录路径时用path[p][i][j]记录第k次转换的初始位置,打印时采用递归的方式。

Sample Input

3

1.2 .89
.88 5.1
1.1 0.15
4
3.1    0.0023    0.35
0.21   0.00353   8.13 
200    180.559   10.339
2.11   0.089     0.06111
2
2.0
0.45

Sample Output

1 2 1

1 2 4 1
no arbitrage sequence exists

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Arbitrage {

	public static int n;
	public static float[][][] f;
	public static int[][][] path;

	public static void floyd() {
		int p, i, j, k;
		p = i = j = k = 0;
		for (p = 1; p < n; p++) {
			for (i = 0; i < n; ++i)
				for (j = 0; j < n; ++j)
					for (k = 0; k < n; ++k) {//找到f(p-1)到f(p)转换的最大值保存下来,同时保存转换路径
						if (f[p - 1][i][k] * f[0][k][j] > f[p][i][j]) {
							f[p][i][j] = f[p - 1][i][k] * f[0][k][j];
							path[p][i][j] = k;
						}
					}
			for (int m = 0; m < n; ++m) {
				if (f[p][m][m] > 1) {
					// System.out.println("find some thing");
					print(m, m, p);
					System.out.println();
				}
			}
		}
	}

	public static void print(int i, int j, int p) {
		if (p == 0) {
			System.out.print(i+" ");//打印起点
			System.out.print(j+" ");//打印起点后打印途径点
		} else {
			print(i, path[p][i][j], p - 1);//先遍历到起点再开始打印
			System.out.print(j+" ");//打印途径点
		}
	}

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream(new File("D:/a.txt"));
			StreamTokenizer st = new StreamTokenizer(new BufferedReader(
					new InputStreamReader(fis)));
			while (st.nextToken() != StreamTokenizer.TT_EOF) {
				System.out.println("-------");
				n = (int) st.nval;
				f = new float[n][n][n];
				path = new int[n][n][n];
				for (int i = 0; i < n; ++i) {
					for (int j = 0; j < n; ++j) {
						if (i == j)
							f[0][i][j] = 1;
						else {
							st.nextToken();
							f[0][i][j] = (float) st.nval;
						}
					}
				}
				floyd();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}




© 著作权归作者所有

aqia358
粉丝 6
博文 82
码字总数 30297
作品 0
海淀
程序员
私信 提问
POJ 2240-Arbitrage(SPFA判断正环-邻接矩阵+邻接表)

Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppo......

Akatsuki__Itachi
2018/01/20
0
0
【欧拉定理+思维】UVA - 11426 GCD - Extreme (II)

版权声明:时间是有限的,知识是无限的,那就需要在有限的时间里最大化的获取知识。 https://blog.csdn.net/Firetocheat_/article/details/82946561 【欧拉定理+思维】UVA - 11426 GCD - Ext...

bryce1010
2018/10/05
0
0
robocup uva老版本代码改写

老代码Uva或者二进制不能连接,解决问题看这里:http://sourceforge.net/forum/forum.php?threadid=2055268&forumid=76439 针对这个问题的解答,我摘录到这里 Almost all past binaries and...

枫言风语
2012/09/01
168
0
[笔记]Implied Risk Neutral Distribution

1. 前言 最近关注了一个非常不错的微信公众号,叫做伽玛交易员(微信号:gammatrader)。微信号的主人是一位非常出色的期权交易员,之前一直在香港从事期权交易。网上有一篇关于他的小传htt...

Clever Liu
2016/07/19
0
0
UVA(714) Copying Books

最大值最小化应该是二分法中经典的题目,Copying Books就是一道最大值最小化的题目 题目大致的意思是要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求...

mambakb
2018/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
7分钟前
0
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
737
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
26
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
79
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部