--- author: nguyencter tags: Panting title: Panting Solution --- $\Huge\text{Panting Solution}$ ------- :::info 📌 Tags: `Matching` `dp` ✍️ Writer: nguyencter 📋 Content: [TOC] ::: ----- ## Thuật toán ## Subtask 1: $\Large K = 1$. Với trường hợp $k=1$ tức là $f(a,b)=min(a,b)$ thì ta có thể sử dụng cặp ghép để giải quyết bài toán này. Ta xem mỗi hàng và mỗi cột của các ô được tô màu đen là các đỉnh để sử dụng cặp ghép. ## Subtask 2: Trường hợp $k=2$ ta thấy chi phí để tô một hình chữ nhật lớn có thể tính được bằng cách lấy $min$ tổng chi phí của $2$ hình con tạo nên nó . Sử dụng hàm và mảng đánh dấu để giảm độ phức tạp tính toán. Gọi hàm $f(x,y,u,v)$ là chi phí nhỏ nhất để tô các ô trong hình chữ nhật có ô trái trên là $(x,y)$ và phải dưới là $(u,v)$. - Duyệt hàng $i$ từ $x$ đến $u-1$ lấy $min(f(x,y,i,v)+f(i+1,y,u,v))$. - Duyệt cột $i$ từ $y$ đến $v-1$ lấy $min(f(x,y,u,i)+f(x,i+1,u,v))$. - Kết quả là $min$ của hàng và cột. Kết quả là $f(1,1,n,n)$. Độ phức tạp là $O(N^4)$. ---- Tham khảo code mẫu ở [đây](https://github.com/nguyencter/CODE/blob/main/painting.cpp).