Ví dụ như bài này:
Được học về định lí Py-ta-go đảo, Tèo biết rằng “Nếu một tam giác có bình phương của một cạnh bằng tổng các bình phương của hai cạnh kia thì tam giác đó là tam giác vuông”. Tèo viết lên giấy N số nguyên dương đôi một khác nhau a1, a2,…, aN. Tèo muốn chọn một bộ ba số (ai, aj, ak) với ai < aj < ak và i ≠ j ≠ k sao cho ba số này là độ dài ba cạnh của một tam giác vuông.
Ví dụ: Với N = 6 và dãy 1, 2, 3, 5, 7, 4. Tèo có 1 cách chọn bộ số thoả mãn là độ dài ba cạnh của một tam giác vuông (3, 4, 5) vì 3^2 + 4^2 = 5^2.
Yêu cầu: Hỏi Tèo có bao nhiêu cách chọn một bộ số như trên.
Dữ liệu: Vào từ tệp văn bản “TRIANGLE.INP” gồm:
• Dòng 1: Ghi số nguyên dương N (3 ≤ N ≤ 1000).
• Dòng 2: Ghi N số nguyên dương a1, a2,…, aN đôi một khác nhau (ai ≤ 105).
Kết quả: Ghi ra tệp văn bản “TRIANGLE.OUT” số nguyên duy nhất là kết quả tìm được.
Hoặc bài này.
Cho N, dãy a[1], a[2],…, a[n] và một số nguyên S. Hãy liệt kê các dãy con có K phần tử 1 ≤ x1 < x2 < … < xk ≤ n sao cho: a[x1] + a[x2] +…+ a[xk] = S.
SUMK.INP SUMK.OUT
7 3 20
8 6 7 10 5 4 6 1 2 7
1 3 5
2 4 6
4 6 7
Dữ liệu: Vào từ tệp văn bản ‘SUMK.INP’ gồm:
• Dòng 1: Số nguyên dương N, K, S.
• Dòng 2: Ghi N số nguyên ai.
Với K ≤ N ≤ 100, S ≤ 1000, |ai| < 1000.
Kết quả: Ghi ra tệp văn bản ‘SUMK.OUT’ gồm nhiều dòng, mỗi dòng là chỉ số các phần tử được chọn. Nếu không có cách chọn ghi ra -1.
Giải thích: Dòng 1 chọn các phần tử (1, 2, 7) có tổng: 8+6+6 = 20;…
Em nghĩ là dùng thêm 1 mảng. Sau đó ví dụ nhập vào 1, 5, 7 thì gán giá trị b[1],b[5],b[7] là 1 còn các phần tử khác là 0. for 2 vòng rồi check xem phần tử thứ 3 có trong mảng hay không.
Hay đây phải dùng quy hoạch động ạ? Em chưa học quy hoạch động