Giả sử chúng ta có ba số a, b và c. Có ba đống đá với số đá lần lượt là a, b và c. Mỗi lần chúng ta có thể thực hiện các thao tác này -
-
Lấy một viên đá từ đống đầu tiên và hai viên đá từ đống thứ hai (khi đống có đủ số lượng đá cần thiết)
-
Lấy một viên đá từ đống thứ hai và hai viên đá từ đống thứ ba (khi đống có đủ số lượng đá cần thiết)
Chúng ta phải đếm tối đa chúng ta có thể thu thập được bao nhiêu viên đá?
Vì vậy, nếu đầu vào giống như a =3; b =4; c =5, thì kết quả sẽ là 9, bởi vì trong hai phép toán wecan lấy hai viên đá từ đống thứ hai và bốn viên từ đống thứ ba, tổng cộng ta có 6 viên đá, sau đó lấy một viên từ đống thứ nhất và hai viên từ đống thứ hai để có thêm 3 viên đá.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (c / 2)) / 2) * 3
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; int solve(int a, int b, int c){ return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3; } int main(){ int a = 3; int b = 4; int c = 5; cout << solve(a, b, c) << endl; }
Đầu vào
3, 4, 5
Đầu ra
9