30/09/2018, 17:20

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
`

... viết 19:33 ngày 30/09/2018

Trùng chủ đề: Tìm tổng số nguyên lớn nhất trên đường đi tìm được

viết 19:24 ngày 30/09/2018

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.

Bài liên quan
0