IOI 2009 - Raisins

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1800 (p) Thời gian: 5.0s Bộ nhớ: 128M Input: bàn phím Output: màn hình

Bonny, nghệ nhân làm sô-cô-la nổi tiếng của Plovdiv, cần cắt một thanh sô-cô-la có nho khô. Thanh sô-cô-la là một khối hình chữ nhật gồm các ô vuông giống hệt nhau, có các cạnh song song với cạnh của thanh sô-cô-la. Các ô được xếp thành \(N\) hàng và \(M\) cột, tổng cộng \(NM\) ô. Mỗi ô có ít nhất một quả nho khô; không có quả nho khô nào nằm giữa hai ô hoặc vắt qua ranh giới giữa các ô.

Ban đầu, thanh sô-cô-la là một khối liền. Bonny cần cắt nó thành những khối ngày càng nhỏ hơn, cho đến khi tách được toàn bộ \(NM\) ô riêng lẻ. Vì rất bận, Bonny cần người phụ việc Peter ranh mãnh giúp cắt. Peter chỉ thực hiện những đường cắt thẳng xuyên suốt khối từ cạnh này sang cạnh kia và muốn được trả công cho từng nhát cắt. Bonny không có sẵn tiền, nhưng còn rất nhiều nho khô, nên đề nghị trả công cho Peter bằng nho khô. Peter đồng ý, nhưng đặt ra điều kiện: mỗi khi cắt một khối sô-cô-la thành hai khối nhỏ hơn, anh ta phải được trả số quả nho khô bằng tổng số quả nho khô trên khối được đưa cho anh ta cắt.

Bonny muốn trả cho Peter ít nhất có thể. Cô biết số quả nho khô trên từng ô trong \(NM\) ô. Cô có thể chọn thứ tự đưa các khối còn lại cho Peter, đồng thời chỉ định hướng cắt (ngang hoặc dọc) và vị trí chính xác của từng đường cắt. Hãy giúp Bonny quyết định cách cắt thanh sô-cô-la thành các ô riêng lẻ để trả cho Peter ít nho khô nhất.

Nhiệm vụ

Cho số quả nho khô trên từng ô, hãy viết chương trình xác định số quả nho khô ít nhất mà Bonny phải trả cho Peter.

Dữ liệu vào

Chương trình đọc từ đầu vào chuẩn:

  • Dòng đầu chứa hai số nguyên \(N\)\(M\), cách nhau bởi một dấu cách.
  • \(N\) dòng tiếp theo mô tả số quả nho khô trên mỗi ô của thanh sô-cô-la. Dòng thứ \(k\) trong số này mô tả hàng thứ \(k\), gồm \(M\) số nguyên cách nhau bởi một dấu cách, theo thứ tự các ô từ trái sang phải. Số nguyên thứ \(p\) trên dòng thứ \(k\) trong số \(N\) dòng này là số quả nho khô trên ô ở hàng \(k\), cột \(p\).

Dữ liệu ra

Ghi ra đầu ra chuẩn một dòng chứa một số nguyên: số quả nho khô ít nhất mà Bonny phải trả cho Peter.

Ràng buộc

  • \(1 \le N, M \le 50\): số ô trên mỗi chiều của thanh sô-cô-la.
  • \(1 \le R_{k,p} \le 1000\): số quả nho khô trên ô ở hàng \(k\), cột \(p\).

Phân nhóm

Bài có tổng cộng \(100\) điểm. Trong một số test có tổng cộng \(25\) điểm, cả \(N\)\(M\) đều không vượt quá \(7\).

Ví dụ

Ví dụ 1

Input
2 3
2 7 5
1 9 5
Output
77
Note

Một trong nhiều cách đạt tổng chi phí \(77\) là:

Nhát cắt đầu tiên mà Bonny yêu cầu Peter thực hiện tách cột thứ ba khỏi phần còn lại của thanh sô-cô-la. Bonny phải trả \(29\) quả nho khô cho nhát cắt này.

Tiếp theo, Bonny đưa cho Peter khối nhỏ hơn trong hai khối: khối gồm hai ô, mỗi ô có \(5\) quả nho khô. Cô yêu cầu Peter cắt khối đó làm đôi và trả \(10\) quả nho khô.

Sau đó, Bonny đưa cho Peter khối lớn nhất còn lại, gồm các ô có lần lượt \(2\), \(7\), \(1\)\(9\) quả nho khô. Cô yêu cầu Peter cắt ngang khối này để tách hàng thứ nhất khỏi hàng thứ hai và trả \(19\) quả nho khô.

Tiếp đến, Bonny đưa cho Peter khối ở phía trên bên trái và trả \(9\) quả nho khô. Cuối cùng, cô yêu cầu Peter tách khối ở phía dưới bên trái và trả \(10\) quả nho khô.

Tổng số nho khô Bonny phải trả là:

\[ 29 + 10 + 19 + 9 + 10 = 77. \]
    Không có cách cắt nào khác tách được thanh sô-cô-la thành $6$ ô riêng lẻ với chi phí nhỏ hơn.

Nguồn

IOI 2009.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: