คำอธิบายปัญหา
สมมติว่าเรามีตัวเลข 5 ตัวคือ b, p, f, h และ c มีเบอร์เกอร์ 2 ประเภท: แฮมเบอร์เกอร์และชิกเกอร์เบอร์เกอร์ แฮมเบอร์เกอร์ต้องการขนมปัง 2 ชิ้นและเนื้อวัว 1 ชิ้น ชิกเกอร์เบอร์เกอร์ต้องการขนมปัง 2 ชิ้นและอกไก่ 1 ชิ้น มีขนมปัง b ชิ้น เนื้อวัว p ชิ้น อกไก่ f ชิ้น ขายแฮมเบอร์เกอร์ราคา h บาท ชิกเกอร์เบอร์เกอร์ราคา c บาท ต้องการหากำไรสูงสุด
ตัวอย่าง: b = 7; p = 5; f = 2; h = 10; c = 12 ผลลัพธ์คือ 34 เพราะทำ 1 แฮมเบอร์เกอร์และ 2 ชิกเกอร์เบอร์เกอร์ รายได้ 1*10 + 2*12 = 34
ขั้นตอนการแก้ปัญหา
res := 0
b := b / 2
ถ้า h < c:
สลับ p และ f
สลับ h และ c
res := res + h * min(b, p) + c * min(max(b - p, 0), f)
คืนค่า res
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int solve(int b, int p, int f, int h, int c) {
int res = 0;
b /= 2;
if (h < c) {
swap(p, f);
swap(h, c);
}
res += h * min(b, p) + c * min(max(b - p, 0), f);
return res;
}
int main() {
int b = 7;
int p = 5;
int f = 2;
int h = 10;
int c = 12;
cout << solve(b, p, f, h, c) << endl;
}
อินพุต
7, 5, 2, 10, 12
เอาต์พุต
34