canuc80k1203·4/50

Lịch Hoạt Động

Nộp bài trên LQDOJ

Bài 12 · Dynamic Programming

Một kế hoạch kéo dài ngày. Trong mỗi ngày , bạn phải chọn đúng một trong ba hoạt động , nhận lần lượt điểm. Không được chọn cùng một hoạt động trong hai ngày liên tiếp. Hãy tối đa hóa tổng điểm sau toàn bộ kế hoạch.

Input

  • Dòng đầu chứa số nguyên .
  • Trong dòng tiếp theo, dòng chứa ba số .

Output

  • In tổng điểm lớn nhất có thể đạt được sau ngày.

Constraints

  • .
  • với mọi .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

4
8 3 5
6 9 4
7 2 10
5 11 6

Output

38

Giải thích: Chọn lần lượt A, B, C, B nhận , và không có hai ngày liên tiếp cùng hoạt động. Đây là tổng lớn nhất trong các lịch hợp lệ.

Lời giải tóm tắt
  • Ý tưởng: Đặt dp[i][j] là tổng điểm lớn nhất sau i ngày khi ngày i chọn hoạt động j, với j∈{A,B,C}. Trạng thái mới bằng điểm của hoạt động hôm nay cộng giá trị lớn hơn trong hai trạng thái ngày trước có hoạt động khác j. Chỉ cần giữ hàng của ngày trước.
  • Chứng minh tính đúng đắn: Xét trạng thái kết thúc ngày i bằng hoạt động j. Do hai ngày liên tiếp không được trùng hoạt động, ngày i-1 phải dùng một trong đúng hai hoạt động còn lại. Theo giả thiết quy nạp, giá trị tốt nhất của từng lựa chọn tiền nhiệm đã được lưu trong hàng trước; cộng điểm ngày i và lấy giá trị lớn hơn cho đúng dp[i][j]. Ba trạng thái cuối bao phủ mọi lịch hợp lệ, nên giá trị lớn nhất trong chúng là đáp án.
  • Độ phức tạp: Thời gian O(N) và bộ nhớ O(1).