Module: Các mẫu trong Lập trình động - 2


Problem

1 /5


điền vào trò chơi

Theory Click to read/hide

Tuyên bố miễn trừ trách nhiệm: Phương pháp được mô tả bên dưới không phổ biến nhưng thường có thể giải quyết vấn đề hoặc giúp bạn tìm ra giải pháp phù hợp.

Nếu một vấn đề yêu cầu bạn hủy/thu gọn/hợp nhất (hoặc tương tự) một mảng một cách tối ưu, thì bạn nên thử giải quyết vấn đề đó bằng lập trình động trên các phân đoạn con.

Hãy lấy dp[l][r] - câu trả lời tối ưu cho phân đoạn con có chỉ số từ l đến r. Việc tính toán lại động lực phụ thuộc nhiều vào nhiệm vụ, nhưng có những ý tưởng chung sau:

1) Nhìn vào các phần tử cực trị l và r. Nếu chúng khớp hoặc bổ sung theo một số cách khác, thì rất có thể có thể cập nhật giá trị của dp[l][r] qua dp[l+1][r-1]. Mặt khác qua dp[l][r-1] hoặc dp[l+1[r].

2) Thường xảy ra trường hợp không thể biểu diễn đoạn [l;r] thông qua một cách dựng. Sau đó, cần phải xem xét tất cả các phần có thể có của phân đoạn con này thành hai phần, nghĩa là lặp lại phần tử k từ l đến r-1 và tính toán lại dp[l][r] đến dp[l][k] và dp[ k+1][r] . Trong các phân đoạn nhỏ hơn, các phần này cũng được sắp xếp, do đó, trên thực tế, các tùy chọn để chia phân đoạn con [l;r] không chỉ thành hai phần mà còn thành bất kỳ số lượng nào trong số chúng đều được tính đến.
 

Problem

Bạn được đưa cho một dải giấy ca rô gồm n ô vuông màu được đánh số từ 1 đến n từ trái sang phải. Hình vuông thứ i ban đầu được tô màu ci.

Ta nói rằng hình vuông i và j nằm trong cùng một thành phần nếu c= cj và c= ck cho tất cả k thỏa mãn tôi < k < j. Nói cách khác, tất cả các ô vuông trên đoạn từ i đến j phải có cùng màu.
Ví dụ: dải [3,3,3] có 1 thành phần được kết nối, trong khi [5,2,4,4] có 3.

Điền vào trò chơi được phát trên dải này như sau:
Khi bắt đầu trò chơi, bạn chọn một ô xuất phát ngẫu nhiên (không được tính là một lượt).
Sau đó, trong mỗi lần di chuyển, bạn thay đổi màu của thành phần được kết nối có chứa hình vuông bắt đầu thành bất kỳ màu nào khác.

Tìm số lần di chuyển tối thiểu cần thiết để đổi màu toàn bộ dải thành một màu.

Đầu vào:
Dòng đầu tiên chứa một số nguyên n (1 ≤ n ≤ 5000) — số ô vuông.

Dòng thứ hai chứa các số nguyên c1,c2,…,cn (1 ≤ ci <5000) — màu ban đầu của hình vuông.

Đầu ra:
In một số nguyên duy nhất — số lần di chuyển tối thiểu để thực hiện.

Ví dụ:
 
Giải thích:
Một trong những cách tối ưu trong ví dụ đầu tiên: [5, 2, 2, 1] -> [5, 2, 2, 2] -> [5, 5, 5, 5]
Đầu vào Đầu ra
4
5 2 2 1
2
8
4 5 2 2 1 3 5 5
4
1
4
0