Mô tả bài toán
Lưới x×y, ô '#' chặn, '.' trống. Từ (0,0) đến (x-1,y-1) chỉ đi phải/xuống. Có thể đổi '#' thành '.' (chi phí 1). Tìm chi phí nhỏ nhất.
Ví dụ
x=4,y=4, grid={"..#.", "#.#.", "#.##", "###."}. Đầu ra: 1 (đổi (2,2)).
Thuật toán (DP trên lưới)
mat[i][j]= chi phí nhỏ nhất đến(i,j).- Khởi tạo
mat[0][0] = (grid[0][0]=='#')?1:0. - Duyệt
: cập nhậtvàvới chi phí +1 nếu ô đích là '#' và ô hiện tại là '.'. - Kết quả
.
Đoạn mã C++
#include <bits/stdc++.h>
using namespace std;
int solve(int x,int y,vector<string> grid){
vector<vector<int>> mat(x,vector<int>(y,100));
mat[0][0] = (grid[0][0]=='#')?1:0;
for(int i=0;i
Đầu vào / Đầu ra
Input: 4, 4, {"..#.", "#.#.", "#.##", "###."}
Output: 1