SUMMMM - Tính tổng dãy số
Dữ liệu vào: standard input
Dữ liệu ra: standard output
Giới hạn thời gian: 1.0 giây
Giới hạn bộ nhớ: 128 megabyte
Đăng bởi: MrThaodaica

Cho dãy số nguyên gồm n phần tử a1, a2, …, an  (1 £ n £ 105) và hai số nguyên dương pq (1 £ p £ q £ n).

Yêu cầu: Hãy tính tổng của các phần tử liên tiếp từ  ap aq  bằng phương pháp quy hoạch động (lập bảng phương án).

Dữ liệu vào: Ghi trong file văn bản SUM.INP có cấu trúc như sau:

- Dòng 1: Ghi số nguyên dương n k, hai số được ghi cách nhau một dấu cách.

- Dòng 2: Ghi n số nguyên a1, a2, …, an, các số được ghi cách nhau ít nhất một dấu cách (-32000 £ ai £ 32000).

- Dòng thứ i trong k dòng tiếp theo: Mỗi dòng ghi hai số nguyên dương piqi, hai số được ghi cách nhau một dấu cách (1 £ pi £ qi £ n).

Dữ liệu ra: Ghi ra file văn bản SUM.OUT theo cấu trúc như sau:

- Dữ liệu được ghi trên k dòng: Dòng thứ i ghi một số nguyên là tổng giá trị của các phần tử trong đoạn

Ví dụ:

SUM.INP

SUM.OUT

5  3

2  9  -3   5   8

1  5

2  3

4  4

 

21

6

5

Thuật toán:

          Gọi A[i] là giá trị của phần tử thứ i trong dãy số a1, a2, …, an.

Gọi T[i] là tổng giá trị các phần tử a1, a2, …, ai  (1 £ i £ n).

          Ta có công thức quy hoạch động để tính T[i] như sau:

                    T[i] := T[i - 1] + A[i];

          Như vậy, việc tính T[n] được thực hiện bằng vòng lặp:

                    T[0] := 0;

For i:=1 to n do

          T[i] := T[i - 1] + A[i];

          Kết quả: Tổng các phần tử liên tiếp từ  ap đến aq được tính theo công thức:

                    Sum := T[q] - T[p-1];

Ví dụ

Back to Top