Bài tập về Dynamic Programing
Chào mọi người, mình làm mãi không ra nên mới post bài mong mọi người giúp đỡ. Mình có một bài tập như thế này :
Cho một ma trận gồm n hàng và m cột được đánh số từ trên xuống dưới, từ trái qua phải, mỗi ô trên ma trận là một số ngẫu nhiên có giá trị tuyệt đối không vượt quá 10^9. Từ vị trí phía trên bên trái, hãy tìm đường đi đến vị trí góc dưới bên phải sao cho đường số ô phải đi qua là nhỏ nhất (mỗi nước đi chỉ đi đến ô có một cạnh chung). Trong các cách đó, tìm cách đi sao cho tổng giá trị các ô trên đường đi là lớn nhất.
Ví dụ :
3 3
1 2 3
-1 5 6
0 2 9
Output : 23
Đây là bài code của mình
F[0, 0] = C[0, 0];
for (int i = 1; i < n; i++)
{
F[i, 0] = F[i - 1, 0] + C[i, 0];
}
for (int j = 1; j < m; j++)
{
F[0, j] = F[0, j - 1] + C[0, j];
}
for (int i = 1; i < n; i++)
{
for (int j = 1; j < m; j++)
{
F[i, j] = Max(F[i - 1, j], F[j - 1, i] + C[i, j]);
}
}
Console.WriteLine(F[n - 1, m - 1]);
Tuy vẫn ra output được 23, nhưng khi nộp bài không đạt điểm tối đa. Mong mọi người giúp mình tìm ra lỗi sai. Cám ơn mọi người
`
Trùng chủ đề: Tìm tổng số nguyên lớn nhất trên đường đi tìm được
F[i, j] = Max(F[i - 1, j], F[j - 1, i] + C[i, j]);
dòng này sai chỗ dấu )
tự coi lại đi.