Thử thách được thực hiện với sự cho phép từ Cuộc thi Thử thách Mã trường Đại học của tôi
Sự phụ thuộc của chúng ta vào điện thoại di động khiến chúng ta sạc pin mỗi đêm cho đến mức tối đa của pin, vì vậy chúng ta không có nguy cơ hết điện vào giữa ngày hôm sau. Thậm chí có những người, khi họ nhìn thấy một cửa hàng miễn phí trong ngày, đã đặt nó để tính phí cho những gì có thể xảy ra.
Tôi là một trong số họ.
Trong những năm qua, tôi đã tinh chỉnh kỹ thuật của mình để không sạc pin tối đa mỗi đêm. Với các thói quen lặp đi lặp lại hoàn toàn được biết đến của tôi, tôi rõ ràng vào thời gian nào trong ngày tôi sẽ có thể thực hiện các lần sạc một phần đó (và mức độ sẽ tăng lên bao nhiêu đơn vị) và mức nào làm giảm mức pin giữa mỗi lần sạc. Với những dữ liệu này, mỗi đêm tôi tính mức pin tối thiểu tôi phải rời khỏi nhà vào ngày hôm sau để nó không bao giờ rơi xuống dưới ngưỡng tự áp đặt của tôi là hai đơn vị.
Những gì tôi chưa quản lý để thành thạo là tính toán tương tự khi tôi rời khỏi thói quen đã thiết lập và tôi có một vài lựa chọn thay thế để làm việc. Nó xảy ra, ví dụ, vào những ngày tôi đang trên đường đến một thành phố khác mà tôi có thể đến theo những cách khác nhau.
Trong cách tiếp cận vấn đề đầu tiên của tôi, tôi giả định rằng tôi muốn di chuyển xung quanh một "bàn cờ", từ góc trên bên trái sang góc dưới bên phải. Trong mỗi "ô", tôi có thể sạc cho điện thoại di động một số tiền cụ thể hoặc tôi không thể và mức tải của nó giảm xuống.
Thử thách
Đưa ra một ma trận số nguyên FxC, xuất ra mức pin tối thiểu tôi cần để đi từ góc trên bên trái sang góc dưới bên phải mà không có mức tải nào giảm xuống dưới 2 đơn vị.
Trong ma trận, một số dương cho biết tôi có thể sạc điện thoại di động bao nhiêu trước khi tôi phải tiếp tục theo đường dẫn của mình, trong khi số âm cho biết không có ổ cắm nào và pin của điện thoại di động giảm mức sạc đó. Đảm bảo rằng số lượng trong các ô nguồn và ô đích (góc trên bên trái và góc dưới bên phải) luôn bằng 0 và phần còn lại của các giá trị (giá trị tuyệt đối) không vượt quá 100.
Ví dụ đã
cho:
Con đường tôi cần ít pin hơn là:
Và mức pin tối thiểu tôi cần là 4
Ghi chú
- Bắt đầu luôn luôn là góc trên cùng bên trái
- Kết thúc luôn luôn là góc dưới bên phải
- Bạn không thể đi đến một tế bào bạn đã vượt qua. Ví dụ: Khi ở vị trí (0,1), bạn không thể đi đến điểm ban đầu (0,0)
- Mức pin của bạn không thể (vì bất kỳ lý do nào) dưới 2
- Bạn có thể cho rằng sẽ luôn có một khởi đầu và kết thúc
- Bạn có thể lấy mảng 1 chiều dưới dạng đa chiều nếu bạn cần
[1,2,3] == [[1,2,3]]
- Có thể có nhiều đường dẫn chính xác (phí tối thiểu cần thiết)
- Mục tiêu của bạn là chỉ xuất mức pin ban đầu thấp nhất cần thiết chứ không phải tuyến đường
- Bạn chỉ có thể đi theo chiều dọc và chiều ngang (không theo đường chéo)
Các trường hợp thử nghiệm
[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
được đặt ở góc trên bên trái và cái còn lại ở góc dưới bên phải