สมมติว่าเรามีอาร์เรย์ A ขนาด n, B ขนาด m และตัวเลข r มีโอกาสซื้อหุ้น n โอกาส โอกาสที่ i ซื้อได้ไม่จำกัด ราคา A[i] มีโอกาสขาย m โอกาส ขายได้ไม่จำกัด ราคา B[i] ไม่สามารถขายมากกว่าที่มี ถ้ามีเงิน r บาทและไม่มีหุ้นอยู่ ต้องหาเงินสูงสุดหลังซื้อขาย
เช่น ถ้าอินพุตคือ A = [4, 2, 5]; B = [4, 4, 5, 4]; r = 11 เอาต์พุตจะเป็น 26 เพราะซื้อ 5 หุ้นราคา 2 แล้วขายทั้งหมดราคา 5 ได้ 26
ขั้นตอนการแก้ปัญหา
n := ขนาดของ A
an := 1100
bn := 0
for i := 0 ถึง n-1:
if an > A[i]: an := A[i]
for i := 0 ถึง m-1:
if bn < B[i]: bn := B[i]
if bn > an:
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