Cho một hàng tất cả n (1 1, A2, …, An cùng số nguyên ổn dương k (k Dòng 1: Chẹn số nDòng 2: Chứa hẹn n số A1, A2, …, An biện pháp nhau ít nhất một lốt cách
Dòng 1: Ghi độ dài dãy con kiếm tìm đượcCác loại tiếp: Ghi những thành phần được lựa chọn vào hàng conDòng cuối: Ghi tổng những thành phần của dãy con kia.

Bạn đang xem: Dãy con dài nhất có tổng chia hết cho k

SUBSEQ.INP

SUBSEQ.OUT

10 5

8

1 6 11 5 10 15 đôi mươi 2 4 9

a<10> = 9

a<9> = 4

a<7> = 20

a<6> = 15

a<5> = 10

a<4> = 5

a<3> = 11

a<2> = 6

Sum = 80

3.4.1. Cách giải 1

Đề bài xích hưởng thụ lựa chọn ra một trong những về tối đa các phần tử vào dãy A sẽ được một dãy tất cả tổng phân chia không còn đến k, ta rất có thể giải bài bác tân oán bởi phương thức chăm chú tổ hợp bằng xoay lui bao gồm nhận xét nhánh cận nhằm giảm sút chi phí vào kỹ thuật vét cạn. Dưới trên đây ta trình bày phương thức quy hoạch động:

Nhận xét 1: Không ảnh hưởng mang lại hiệu quả sau cuối, ta có thể đặt: Ai := Ai mod k với mọi i: 1 i1, Ai2, …, Alặng. Các bộ phận này còn có tổng đồng dư với S theo mô-đun k.

Xét những hàng sau:

Dãy 0 := () = Dãy trống rỗng (Tổng = 0 (thủ thuật k))

Dãy 1 := (Ai1) Dãy 2 := (Ai1, Ai2)

Dãy 3 := (Ai1, Ai2, Ai3)

… …

Dãy m := (Ai1, Ai2, …, Aim)

do vậy tất cả m + 1 hàng, trường hợp m >= k thì theo nguyên lý Dirichlet vẫn lâu dài nhì dãy bao gồm tổng đồng dư theo mô-đun k. Giả sử đó là hai dãy:

Ai1 + Ai2 + … + Aip = Ai1 + Ai2 + … + Aip + Aip+1 + … + Aiq (hack k)

Suy ra Aip+1 + … + Aiq chia hết cho k. Vậy ta có thể xoá hết những phần tử này vào dãy đã chọn mà vẫn được một dãy tất cả tổng đồng dư với S theo modul k, xích míc cùng với giả thiết là hàng vẫn chọn có số thành phần buổi tối tphát âm.


Công thức truy nã hồi:

Nếu ta hotline F là số phần tử tối tgọi phải lựa chọn vào dãy A1, A2, …, Ai để có tổng phân chia k dư t. Nếu không có phương án chọn ta coi F =

*
. Khi kia F được tính qua bí quyết truy vấn hồi sau:

Nếu vào hàng trên chưa hẳn chọn Ai thì F = F;

Nếu vào dãy trên đề xuất lựa chọn Ai thì F = 1 + F*