NKCABLE Spoj – Nối mạng

Nguồn đề bài: http://vn.spoj.com/problems/NKCABLE/

1. Đề bài NKCABLE Spoj

Các học sinh khi đến thực tập trong phòng máy tính thường hay chơi trò chơi điện tử trên mạng. Để ngăn ngừa, người trực phòng máy đã ngắt tất cả các máy tính ra khỏi mạng và xếp chúng thành một dãy trên một cái bàn dài và gắn chặt máy xuống mặt bàn rồi đánh số thứ tự các máy từ 1 đến N theo chiều từ trái sang phải. Các học sinh tinh nghịch không chịu thua, họ đã quyết định tìm cách nối các máy trên bàn bởi các đoạn dây nối sao cho mỗi máy được nối với ít nhất một máy khác. Để tiến hành công việc này, họ đã đo khoảng cách giữa hai máy liên tiếp. Bạn hãy giúp các học sinh này tìm cách nối mạng thoả mãn yêu cầu đặt ra sao cho tổng độ dài cáp nối phải sử dụng là ít nhất.

Dữ liệu

  • Dòng đầu tiên chứa số lượng máy N (1 ≤ N ≤ 25000).
  • Dòng thứ i trong số N-1 dòng tiếp theo chứa các khoảng cách từ máy i đến máy i+1 (i=1,2,…,N-1). Giả thiết rằng khoảng cách từ máy 1 đến máy N không vượt quá 106.

Kết quả

Ghi ra độ dài của cáp nối cần sử dụng.

Ví dụ

Input:
6
2
2
3
2
2

Output:
7

2. Gợi ý NKCABLE Spoj

-Các bạn dùng thuật toán QHĐ:

–Cơ sở: —F[1]=A[1], F[2]=A[2], F[3]=F[1]+F[2].

–Công thức truy hồi: —F[i]=Min(F[i-1]+A[i], F[i-2]+A[i])

3. Code Tham Khảo NKCABLE Spoj

uses math;
var i,n: longint;
    f,a: array[1..25000] of longint;
begin
    readln(n);
    for i:=1 to n do 
        readln(a[i]);
    f[1]:=0;
    f[2]:=a[1];
    f[3]:=a[1]+a[2];
    for i:=4 to n do 
        f[i]:=min(f[i-1]+a[i-1],f[i-2]+a[i-1]);
    writeln(f[n]);
end.

6 thoughts on “NKCABLE Spoj – Nối mạng

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *