สมมติว่าเรามีอาร์เรย์ A สองขนาด n และ B ขนาด m และอีกจำนวนหนึ่ง r ไม่มีโอกาสในการซื้อหุ้น i-th ของพวกเขาอนุญาตให้ซื้อหุ้นได้มากเท่าที่เราต้องการ โดยราคาหุ้นคือ A[i] และยังมีโอกาสในการขายหุ้นอีกด้วย i-th ของพวกเขาช่วยให้ขายหุ้นได้มากเท่าที่เราต้องการ ราคาขายของหุ้น ith คือ B[i] เราไม่สามารถขายหุ้นได้มากกว่าที่เรามี ถ้าเรามีเงินจำนวน r และไม่มีหุ้นอยู่ เราต้องหาจำนวนเงินสูงสุดที่เราถือได้หลังจากซื้อและขาย
ดังนั้น ถ้าอินพุตเป็น A =[4, 2, 5]; B =[4, 4, 5, 4]; r =11 แล้วผลลัพธ์จะเป็น 26 เพราะเรามีเงิน 11 จำนวนเงิน เป็นการดีที่สุดที่จะซื้อหุ้น 5 หุ้นที่ราคา 2 แล้วขายทั้งหมดในราคา 5 ดังนั้นเราจะได้ 26 ในตอนท้าย
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of A an := 1100 bn := 0 for initialize i := 0, when i < n, update (increase i by 1), do: if an > A[i], then: an := A[i] for initialize i := 0, when i < m, update (increase i by 1), do: if bn < B[i], then: bn := B[i] if bn > an, then: r := bn * (r / an) + (r - (r / an) * an) return r
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, vector<int> B, int r){ int n = A.size(), m = B.size(); int an = 1100, bn = 0; for (int i = 0; i < n; i++){ if (an > A[i]) an = A[i]; } for (int i = 0; i < m; i++){ if (bn < B[i]) bn = B[i]; } if (bn > an){ r = (bn) * (r / an) + (r - (r / an) * an); } return r; } int main(){ vector<int> A = { 4, 2, 5 }; vector<int> B = { 4, 4, 5, 4 }; int r = 11; cout << solve(A, B, r) << endl; }
อินพุต
{ 4, 2, 5 }, { 4, 4, 5, 4 }, 11
ผลลัพธ์
26