NKCABLE - Nối mạng

Tags: dp

Problem

https://vn.spoj.com/problems/NKCABLE

https://oj.vnoi.info/problem/NKCABLE

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á 10^6.

Kết quả

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

Ví dụ

**Dữ liệu:**
6
2
2
3
2
2

**Kết qủa**
7

Tutorial

Gọi F[i][0] là độ dài ngắn nhất xét đến máy i với máy i không được nối với máy i-1. F[i][1] là độ dài ngắn nhất xét đến máy i với máy i nối với máy i-1.

Khi đó F[2][0] = inf (không tồn tại cách này) F[2][1] = a[1].

F[i][0] = F[i-1][1] (nếu i không nối i-1 thì bắt buộc i-1 phải nối i-2)

F[i][1] = min(F[i-1][0] , F[i-1][1]) + a[i-1] (i nối i-1 thì i-1 có thể nối hoặc không nối với i-2)


Submission

NKCABLE.cpp