เราได้รับจำนวนเต็ม a, b, c, n เป้าหมายคือเพิ่มค่าผลรวม x + y + z ให้มากที่สุด โดยที่ ax + by + cz = n
จากสูตร: cz = n - (ax + by) → z = (n - (ax + by)) / c
โดยการ fix x และ y คำนวณ z จากสูตร สำหรับ x, y, z ทุกค่า คำนวณผลรวมและเก็บค่าสูงสุด
อินพุต
n = 6, a = 3, b = 4, c = 5
เอาต์พุต
maximum x+y+z is 2
คำอธิบาย − x=2, y=0, z=0 → 3*2+0*4+0*5 = 6 = n
อินพุต
n = 4, a = 3, b = 1, c = 2
เอาต์พุต
maximum x+y+z = 4
คำอธิบาย − x=0, y=4, z=0 → 0*3+4*1+0*2 = 4 = n
วิธีการที่ใช้ในโปรแกรมด้านล่าง
- ตัวแปร a, b, c, n สำหรับสมการ ax+by+cz=n
- ฟังก์ชัน maximize(int n, int a, int b, int c) คืนค่าผลรวม x+y+z สูงสุด
- ลูป i = 0 ถึง n ก้าว a (ค่า ax ที่เป็นไปได้)
- ลูป j = 0 ถึง n-i ก้าว b (ค่า by ที่เป็นไปได้)
- คำนวณ z = (n - (i + j)) / c
- ถ้า z เป็นจำนวนเต็ม (floor(z) == ceil(z)) คำนวณ x=i/a, y=j/b, temp=x+y+z
- อัปเดต maxx = max(maxx, temp)
- คืนค่า maxx
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int maximize(int n, int a, int b, int c) {
int maxx = 0;
for (int i = 0; i <= n; i += a)
for (int j = 0; j <= n - i; j += b) {
float z = (n - (i + j)) / c;
if (floor(z) == ceil(z)) {
int x = i / a;
int y = j / b;
int temp = x + y + (int)z;
if (temp >= maxx) maxx = temp;
}
}
return maxx;
}
int main() {
int n = 6, a = 3, b = 4, c = 5;
cout << "Maximized the value of x + y + z: " << maximize(n, a, b, c);
return 0;
}
ผลลัพธ์
Maximized the value of x + y + z: 2