求最大利益的演算法

2021-07-24 23:57:48 字數 792 閱讀 4161

題目:外匯交易可以通過兌換不國家的貨幣以賺取匯率差,比如1美元兌換100日元時購入1000美元,然後匯率變動到1美元兌換108美元時賣出,這時的收益是(108-100)*1000=8000日元

現在請將某貨幣在t時刻的**rt(t=0,1,2,...n-1)作為輸入資料,計算出**差rj-ri(其中j>i)時的最大值

輸入:第1行輸入整數n,接下來n行依次給整數rt賦值

輸出:在單獨一行中輸出最大值

限制:2<=n<=200000

1輸入示例:5 1 2 4 3 5 輸出:3

輸入示例: 3 4 3 2      輸出:-1

簡單演算法:

for j從1到n-1

for i從0到j-1

maxv(maxv 與r[j]-r[i])i較大的乙個)

在這個演算法中我們將所有滿足j>i的i與j的組合全部列了出來,演算法複雜度接近n的平方,由於n最大達到了200000,因此這個演算法效率不高。

高效演算法:我們要找的數就是j左側的最小值,在j自增的過程中,將現階段rj的最小值儲存下來,那麼只需要o(1)便可以求出j時刻的最大利益,這裡的o(1)表示不受輸入大小影響的固定複雜度。

用c++實現的**如下:

#include

#include

using namespace std;

static const int max = 200000;

int main()

cout << maxv << endl;

system("pause");

return 0;

}

Dinic演算法求最大流

include using namespace std const int oo 1e9 無窮大 const int maxm 111111 邊的最大數量,為原圖的兩倍 const int maxn 999 點的最大數量 int node,src,dest,edge node節點數,src源點,de...

求最大利益,將兩層for迴圈優化為一層

題目 輸入n,接下來n行,每行乙個數字。輸出後減前的最大值。題解 兩層迴圈搞定。優化 一層迴圈中呼叫max函式求得此時最大值與此時陣列與最小值得差中的最大值。用min函式計算從下標為零到此時的最小值。進行儲存。像是乙個簡單的遞迴。include include include include inc...

演算法之求最大子陣列

最大子陣列問題暴力求解演算法複雜度2 n 兩種高效方法求最大字陣列問題 問題 求乙個陣列中相加可以獲得最大值的子陣列,子陣列是指原陣列中任意連續的一段 1.遞迴與分治法 複雜度nlogn include using namespace std int max mid int a,int mid,in...