Gửi bài giải
Điểm:
40,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
1G
Input:
stdin
Output:
stdout
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch, TEXT
An có ~n~ lá bài, lá bài thứ ~i~ (~1 \leq i \leq n~) có màu ~c_i~ và có giá trị là ~v_i~, tổng cộng có không quá ~k~ màu.
Các lá bài được đặt lần lượt theo thứ tự từ 1 tới ~n~ vào một hàng. Nếu ở lượt đặt thứ ~i~, lá bài thứ ~i~ có màu trùng với một lá bài nào đó đang nằm trên hàng, An có thể chọn bỏ tất cả các lá bài nằm giữa lá ~i~ và một lá bất kỳ đang nằm trên hàng cùng màu với lá ~i~ (việc bỏ bao gồm bỏ cả hai lá này), rồi nhận được số điểm bằng với tổng giá trị của những lá bài bị bỏ ra.
Yêu cầu: Hãy giúp An tìm chiến thuật để nhận được số điểm là lớn nhất.
INPUT
- Dòng đầu tiên chứa hai số nguyên ~n~, ~k~ (~1 \leq n, k \leq 10^6~).
- Dòng thứ hai chứa ~n~ số nguyên, số nguyên thứ ~i~ là ~c_i~ (~1 \leq c_i \leq k~).
- Dòng thứ ba chứa ~n~ số nguyên, số nguyên thứ ~i~ là ~v_i~ (~1 \leq v_i \leq 10^9~).
OUTPUT
Một số nguyên duy nhất là số điểm lớn nhất có thể nhận được.
SUBTASKS
- ~15\%~ số điểm có ~1 \leq n, k \leq 15~, ~c_i = v_i~.
- ~15\%~ số điểm có ~1 \leq n, k \leq 300~, ~c_i = v_i~.
- ~30\%~ số điểm có ~1 \leq n, k \leq 3 \times 10^3~.
- ~15\%~ số điểm có ~1 \leq n, k \leq 2 \times 10^5~.
- ~10\%~ số điểm có ~c_i = v_i~.
- ~15\%~ số điểm không có ràng buộc gì thêm.
SAMPLE INPUT
6 3
1 2 1 3 3 2
1 2 1 3 3 2
SAMPLE OUTPUT
11
Bình luận