題目:外匯交易可以通過兌換不國家的貨幣以賺取匯率差,比如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...