canuc80k7809·10/10

Hai Loại Bóng Săn

Nộp bài trên LQDOJ

Bài 78 · Aliens Trick

Có mục tiêu. Với mục tiêu , một Poke Ball bắt thành công với xác suất , còn một Ultra Ball bắt thành công với xác suất .

Bạn có không quá Poke Ball và Ultra Ball. Mỗi mục tiêu được nhận tối đa một bóng của mỗi loại. Nếu một mục tiêu nhận cả hai loại bóng, hai lần ném được coi là độc lập và mục tiêu được bắt khi ít nhất một lần ném thành công; do đó xác suất bắt mục tiêu đó là

Hãy phân các bóng để kỳ vọng tổng số mục tiêu bắt được là lớn nhất.

Input

  • Dòng đầu chứa ba số nguyên và .
  • Dòng thứ hai chứa .
  • Dòng thứ ba chứa . Mọi xác suất trong input có đúng ba chữ số sau dấu thập phân.

Output

  • In kỳ vọng lớn nhất. Đáp án được chấp nhận nếu sai số tuyệt đối hoặc tương đối không quá .

Constraints

  • , và mỗi giá trị có đúng ba chữ số sau dấu thập phân.

Scoring

  • Subtask ( số điểm): dữ liệu nằm trong miền nhỏ, phù hợp với lời giải vét cạn hoặc DP trực tiếp được mô tả trong tài liệu.
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

2 1 1
0.500 0.000
0.000 0.500

Output

1.0000000000

Giải thích: Dùng Poke Ball cho mục tiêu thứ nhất và Ultra Ball cho mục tiêu thứ hai. Hai xác suất thành công đều là , nên kỳ vọng tổng bằng .

Lời giải tóm tắt
  • Mô hình: Phân không quá a Poke Ball và b Ultra Ball cho n mục tiêu, mỗi mục tiêu tối đa một bóng mỗi loại, để kỳ vọng số mục tiêu bắt được lớn nhất. Đại lượng bị giới hạn về số lượng được chuyển thành một khoản phạt hoặc phần thưởng, nhờ đó bỏ được chiều đếm lớn khỏi DP hay thuật toán tối ưu cơ sở.
  • Thuật toán: Scale xác suất theo nghìn và kỳ vọng theo triệu, giữ DP theo số bóng của loại ít hơn, gắn phạt cho loại còn lại và nhị phân mức phạt nguyên.
  • Chứng minh đúng: Scale p,u theo 1000 và kỳ vọng theo 10^6. Đổi tên hai loại để a≤b, giữ DP theo số Poke Ball. Gắn penalty cho mỗi Ultra Ball; tại mỗi mục tiêu có bốn lựa chọn: không dùng, chỉ Ultra, chỉ Poke, hoặc cả hai với gain p1000+u1000−pu. DP lưu thêm số Ultra và phá hòa theo số lớn hơn. Số Ultra tối ưu giảm theo penalty, nên ngưỡng lớn nhất còn dùng ít nhất b bóng cho phép cộng penaltyb và khôi phục kỳ vọng chính xác.
  • Độ phức tạp: Sau khi đổi loại bóng, thời gian O(n·min(a,b)·log 10^6) và bộ nhớ O(min(a,b)).