Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e8f9d5e

Browse files
Create Readme.md
1 parent b289047 commit e8f9d5e

File tree

1 file changed

+17
-0
lines changed
  • Graph/3387.Maximize-Amount-After-Two-Days-of-Conversions

1 file changed

+17
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
### 3387.Maximize-Amount-After-Two-Days-of-Conversions
2+
3+
考虑到货币的种类只有20种,我们似乎可以用暴力的方法求出每天任意两种货币之间的最大汇率。于是我们可以想到使用o(n^3)的Floyd算法,看做是求图中任意两点之间的最大距离。
4+
5+
Floyd的具体做法是,每次引入一条边,然后将全局网络做一遍松弛:
6+
```
7+
for ([a,b]: edges)
8+
for (int i=0; i<n; i++)
9+
for (int j=0; j<n; j++)
10+
dist[i][j] = max(dist[i][j], dist[i][a]+edge[a][b]+dist[b][j]);
11+
dist[j][i] = max(dist[j][i], dist[j][a]+edge[a][b]+dist[b][i]);
12+
```
13+
14+
有了两天各自任意两种货币之间的最大汇率`dist1``dist2`之后,枚举第一天结束的中介货币k,本题求的就是最大的`dist1[s][k]*dist2[k][s]`.
15+
16+
需要注意的细节是:
17+
1. a->b的路径长度(汇率)是t的话,必然有b->a的路径长度是1/t,别忘了将其也加入图优化的松弛过程。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /