Em đã tim được thuật toán và code được bài:
Cho dãy n số tự nhiên a1, a2,…, an và số tự nhiên S. Hỏi tồn tại dãy con có tổng S bằng cách cộng một số phần tử trong dãy A không.
Cho dãy a1, a2,…, an. Tìm một dãy con của dãy đó có tổng bằng S.Input
- Dòng 1 chứa 2 số n, S. (0 < n, S ≤ 1000)
- Dòng tiếp theo, ghi n số a1, a2, …, ai (|ai| ≤ 1000)
Output: Xuất ra số 1 nếu tồn tại dãy con thỏa để bài, ngược lại thì xuất 0.
Thuật toán của em cũng khá đơn giản:
- Đặt L[i,t]=1 nếu có thể tạo ra tổng t từ một dãy con của dãy gồm các phần tử a1, a2, …, ai. Ngược lại thì -L[i,t]=0. Nếu L[n,S)=1 thì đáp án của bài toán trên là “có”.
- Ta có thể tính L[i,t] theo công thức: L[i,t]=1 nếu L[i–1,t]=1 hoặc L[i–1,t–a[i]]=1.
Nhưng mà em thắc mắc là làm sao để đếm đc số dãy con có tổng bằng S ạ. Em phát triển từ thuật toán này nhưng thấy không thể ra được đáp án nên hi vong các anh xem qua và cho em xin ý kiến ạ.