Tôi đã hỏi câu hỏi này trên StackOverflow , nhưng tôi nghĩ đây là một nơi thích hợp hơn.
Đây là một vấn đề từ Giới thiệu về khóa học thuật toán :
Bạn có một mảng với số nguyên dương (mảng không cần phải được sắp xếp hoặc các phần tử duy nhất). Đề xuất thuật toán để tìm tổng các phần tử lớn nhất chia hết cho .
Ví dụ: . Câu trả lời là (với các yếu tố )
Việc tìm kiếm nó trong tương đối dễ dàng bằng cách sử dụng lập trình động và lưu trữ số tiền lớn nhất với phần còn lại .
Ngoài ra, nếu chúng ta hạn chế sự chú ý vào một chuỗi các yếu tố liền kề, bạn có thể dễ dàng tìm thấy chuỗi tối ưu như vậy trong thời gian , bằng cách lưu trữ một phần tổng modulo : let , với mỗi phần còn lại nhớ chỉ số lớn nhất mà S [j] \ equiv r \ pmod {n} , và sau đó cho mỗi i bạn xem xét S [j] -S [i] nơi j là chỉ số tương ứng với r = S [i] \ bmod n .n S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + a [ i ] r j S [ j ] ≡ r
Nhưng có một giải pháp thời gian cho trường hợp chung không? Bất kỳ đề xuất sẽ được đánh giá cao! Tôi xem xét điều này có một cái gì đó để đối phó với đại số tuyến tính nhưng tôi không chắc chính xác những gì.
Ngoài ra, điều này có thể được thực hiện trong thời gian không?