Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Tối đa hóa tổng lợi nhuận của tất cả các người X trong Java

Cho 5 biến nguyên: Num, P1, P2, profit_P1, profit_P2. Nhiệm vụ là tối đa hóa lợi nhuận từ tất cả các số tự nhiên trong khoảng [1, Num]. Nếu số chia hết cho P1 thì lợi nhuận tăng profit_P1, nếu chia hết cho P2 thì tăng profit_P2. Lợi nhuận từ một số chỉ được cộng tối đa một lần.

Ví dụ minh họa

Đầu vào: int num = 4, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2

Đầu ra: Tối đa hóa tổng lợi nhuận = 4

Giải thích: Số từ 1 đến 4. Không số nào chia hết cho 6. Số 2 và 4 chia hết cho 2 → lợi nhuận 2×2 = 4.

Đầu vào: num = 3, P1 = 1, P2 = 2, profit_P1 = 3, profit_P2 = 4

Đầu ra: Tối đa hóa tổng lợi nhuận = 10

Giải thích: 1,2,3 chia hết cho 1. Chỉ 2 chia hết cho 2. Số 2 chia hết cho cả hai → chọn P2 vì lợi nhuận cao hơn (4 > 3). Lợi nhuận: 1,3 cho P1 (2×3=6) + 2 cho P2 (1×4=4) = 10.

Phương pháp tiếp cận

  • Cho 6 biến nguyên: Num (khoảng số), P1, P2 (hai người), profit_P1, profit_P2 (lợi nhuận tương ứng)
  • Gọi phương thức profitMaximisation() từ main()
  • Trong profitMaximisation: Số chia hết cho cả P1 và P2 là bội của LCM(P1,P2). Chỉ nên chia cho người cho lợi nhuận cao hơn.
  • Công thức: profit_P1 × (num/P1) + profit_P2 × (num/P2) – min(profit_P1, profit_P2) × (num/LCM(P1,P2))
  • Phương thức CalculateGcd() để tính GCD, từ đó ra LCM = (a×b)/GCD(a,b)
  • Trả về kết quả về main() hiển thị

Ví dụ mã Java

public class testClass {
    static int CalculateGcd(int n1, int n2) {
        if (n2 == 0) return n1;
        return CalculateGcd(n2, n1 % n2);
    }
    
    static int profitMaximisation(int n, int a, int b, int x, int y) {
        int result = x * (n / a);
        result += y * (n / b);
        result -= Math.min(x, y) * (n / ((a * b) / CalculateGcd(a, b)));
        return result;
    }
    
    public static void main(String[] args) {
        int num = 6, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2;
        System.out.println("Maximize the total profit of all the persons X " 
            + profitMaximisation(num, P1, P2, profit_P1, profit_P2));
    }
}

Đầu ra

Maximize the total profit of all the persons X 12