thảo luận [Học Tập] Topic thuật toán

Mình có 1 cái problem như hình, có runtime constraint nên không thể brute force được, các ae vào giúp đỡ. Mình cám ơn
1640339657874.png

Các ae lưu ý là 2 là winter chứ k phải summer
 
Mình có 1 cái problem như hình, có runtime constraint nên không thể brute force được, các ae vào giúp đỡ. Mình cám ơn
1640339657874.png

Các ae lưu ý là 2 là winter chứ k phải summer
Xin nốt cái example luôn. Đọc sơ qua thì hướng giải quyết có thể là greedy algorithm.
 
Là sao thím ơi, mình cũng không hiểu cho lắm
Bài này có thể giải theo 2 cách, dùng recursion hoặc dynamic programming. Cơ bản là mình phải tìm ra tất cả giá trị p (có thể có rất nhiều p) có thể xảy ra với a và b cho trước. Sau cùng là tìm ra giá trị p lớn nhất.
Mấy bài toán dùng DP chưa bao giờ là dễ giải. Cần nhiều thời gian để suy nghĩ
 
Bài này có thể giải theo 2 cách, dùng recursion hoặc dynamic programming. Cơ bản là mình phải tìm ra tất cả giá trị p (có thể có rất nhiều p) có thể xảy ra với a và b cho trước. Sau cùng là tìm ra giá trị p lớn nhất.
Mấy bài toán dùng DP chưa bao giờ là dễ giải. Cần nhiều thời gian để suy nghĩ
Dùng recursion như nào vậy thím ơi, thử hết value trong cái subset thứ 3 ( cả 2 season) à ?
 
Dùng recursion như nào vậy thím ơi, thử hết value trong cái subset thứ 3 ( cả 2 season) à ?
Đúng rồi, với mỗi item cứ thử cả 3 trường hợp:

  • Không mua nó (save cost)
  • Mua vào summer (nếu được)
  • Mua vào winter (nếu được)

Kết quả là max của 3 trường hợp này.
Mã giả cho bạn tham khảo, DP thì cứ memoiz cái hàm này thôi:

Code:
maxPoint(i, cw, cs) { // Xét item thứ i, với số tiền còn lại cho mùa đông (cw) và mùa hạ (cs)
    if (i >= n) return 0;
    p = maxPoint(i + 1, cw, cs) // không mua item

    if (s[i] & 1 && c[i] <= cs) { // mua mùa hạ
        p = max(p, p[i] + maxPoint(i + 1, cw, cs - c[i]))
    }

    if (s[i] & 2 && c[i] <= cw) { // mua mùa đông
        p = max(p, p[i] + maxPoint(i + 1, cw - c[i], cs))
    }

    return p
}
 
Đúng rồi, với mỗi item cứ thử cả 3 trường hợp:

  • Không mua nó (save cost)
  • Mua vào summer (nếu được)
  • Mua vào winter (nếu được)

Kết quả là max của 3 trường hợp này.
Mã giả cho bạn tham khảo, DP thì cứ memoiz cái hàm này thôi:

Code:
maxPoint(i, cw, cs) { // Xét item thứ i, với số tiền còn lại cho mùa đông (cw) và mùa hạ (cs)
    if (i >= n) return 0;
    p = maxPoint(i + 1, cw, cs) // không mua item

    if (s[i] & 1 && c[i] <= cs) { // mua mùa hạ
        p = max(p, p[i] + maxPoint(i + 1, cw, cs - c[i]))
    }

    if (s[i] & 2 && c[i] <= cw) { // mua mùa đông
        p = max(p, p[i] + maxPoint(i + 1, cw - c[i], cs))
    }

    return p
}
Cám ơn bạn, nhân tiện cho mình hỏi, bài này độ khó chắc tầm medium trên leetcode nhỉ ?
 
Bài này có thể giải theo 2 cách, dùng recursion hoặc dynamic programming. Cơ bản là mình phải tìm ra tất cả giá trị p (có thể có rất nhiều p) có thể xảy ra với a và b cho trước. Sau cùng là tìm ra giá trị p lớn nhất.
Mấy bài toán dùng DP chưa bao giờ là dễ giải. Cần nhiều thời gian để suy nghĩ

recursion thì cũng là DP thôi chứ
V3so9BC.png
 
Bạn luyện kiểu gì mà giỏi thế nhỉ, mình easy còn chưa làm đc
Chăm chỉ + có lộ trình rõ ràng là được thôi bạn.
Level đi thi này nọ thì khó chứ mức medium và mấy bài hard bth trên LC thì mình nghĩ ai luyện 1 tgian đủ lâu đều có thể làm được.

p/s: đủ lâu = khoảng 1-2 năm liên tục nha
 
Chăm chỉ + có lộ trình rõ ràng là được thôi bạn.
Level đi thi này nọ thì khó chứ mức medium và mấy bài hard bth trên LC thì mình nghĩ ai luyện 1 tgian đủ lâu đều có thể làm được.

p/s: đủ lâu = khoảng 1-2 năm liên tục nha
Bác chia sẻ rõ được k ạ, kiểu trước bác có follow lộ trình nào ko?

Em chỉ cần luyện để làm thành thục medium đi phỏng vấn là tốt rồi chứ em ko đi thi
 
Bác chia sẻ rõ được k ạ, kiểu trước bác có follow lộ trình nào ko?

Em chỉ cần luyện để làm thành thục medium đi phỏng vấn là tốt rồi chứ em ko đi thi
Lộ trình sơ sơ thì trước minh cũng share trong thớt này vài lần rồi, thím có thể search lại.

Còn lộ trình chi tiết thì dài dòng lắm, nếu thím thật sự cần thiết và quyết tâm thì có thể hộp mình hướng dẫn cho, vì nói thật 2 chữ chăm chỉ tuy đơn giản nhưng rất khó làm được.
 
Cám ơn bạn, nhân tiện cho mình hỏi, bài này độ khó chắc tầm medium trên leetcode nhỉ ?
Mấy bài kiểu này nếu bạn không phải một coder có kinh nghiệm đang muốn thử thách bản thân thì nên bỏ qua. DP hại não vl
recursion thì cũng là DP thôi chứ
V3so9BC.png
2 kỹ thuật có thể dùng chung cho 1 mục đích nhưng phương thức hoạt động khác nhau. Thông thường, DP là phiên bản cải tiến của recursion.
 
Last edited:
Lộ trình sơ sơ thì trước minh cũng share trong thớt này vài lần rồi, thím có thể search lại.

Còn lộ trình chi tiết thì dài dòng lắm, nếu thím thật sự cần thiết và quyết tâm thì có thể hộp mình hướng dẫn cho, vì nói thật 2 chữ chăm chỉ tuy đơn giản nhưng rất khó làm được.
Bác cho em hỏi em dùng C# để luyện algo, mà xử lý array trong C# kiểu thêm phần tử các thứ k dễ như JS thì em có đc convert sang List để cho tiện Add Remove khi phỏng vấn k nhỉ
 
Back
Top