Cắt gỗ

Xem dạng PDF

Gửi bài giải


Điểm: 0,43 (OI)
Giới hạn thời gian: 0.38s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Nguồn bài:
VNOI Marathon '08 - Practice RoundProblem Setter: Khúc Anh Tuấn
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Ở một xưởng gỗ có rất nhiều đoạn gỗ thừa. Để đạt năng suất cao, người ta muốn tận dụng những thanh gỗ này. Tất nhiên giá trị của mỗi đoạn gỗ sẽ phụ thuộc vào độ dài của chúng. Tuy nhiên sự phụ thuộc này không đơn giản chỉ là sự phụ thuộc tuyến tính: các thanh gỗ càng dài càng có giá trị cao. Do đó, nếu cần thiết, người ta sẽ cắt các thanh gỗ này ra làm nhiều đoạn nhỏ hơn.

Người ta có một máy cắt, mỗi lần có thể cắt một thanh gỗ ra làm hai thanh có độ dài ngắn hơn. Do lưỡi cưa sẽ mòn dần trong quá trình cắt, chi phí của mỗi lần cắt sẽ được tính như sau: lần đầu sẽ mất ~1~ VNĐ, lần thứ 2 sẽ là ~2~ VNĐ, lần thứ 3 sẽ là ~3~ VNĐ,...

Nhiệm vụ của bạn sẽ là tính lợi nhuận lớn nhất có thể thu được từ các đoạn gỗ thừa này.

Input

  • Dòng đầu ghi số ~N~, số thanh gỗ thừa.
  • ~N~ dòng sau, mỗi dòng ghi một số nguyên dương là độ dài của một thanh gỗ.
  • Dòng tiếp theo ghi số ~M~, số độ dài có giá trị.
  • ~M~ dòng tiếp theo, mỗi dòng ghi ~2~ số nguyên dương lần lượt là độ dài của một đoạn gỗ và giá trị thu được (tính bằng VNĐ) nếu ta có đoạn gỗ đó.

Giới hạn:

  • ~1 \le N \le 50~.
  • ~1 \le M \le 50~.
  • Độ dài của một thanh gỗ không quá ~50~.
  • Giá trị thu được của một đoạn gỗ không quá ~50~.

Output

Ghi ra một số duy nhất là lợi nhuận lớn nhất có được, đừng quên tính cả chi phí dùng để cắt gỗ.

Sample Input

2
3
4
2
1 10
2 11

Sample Output

55

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.