Cắt gỗ

View as PDF

Submit solution


Points: 0.43 (partial)
Time limit: 0.38s
Memory limit: 512M
Input: stdin
Output: stdout

Problem source:
VNOI Marathon '08 - Practice RoundProblem Setter: Khúc Anh Tuấn
Problem type
Allowed languages
C, C++, Java, Kotlin, Pascal, PyPy, Python, 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

Comments

Please read the guidelines before commenting.


There are no comments at the moment.