Xếp hàng mua vé

Xem dưới dạng PDF

Gửi bài giải

Điểm: 10
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Kiểu bài tập

Có \(N\) người xếp hàng mua vé dự buổi hòa nhạc. Ta đánh số họ từ \(1\) đến \(N\) theo thứ tự đứng trong hàng. Mỗi người cần mua một vé, nhưng người bán vé được phép bán cho mỗi người tối đa \(2\) vé. Vì thế, một số người có thể rời hàng và nhờ người đứng trước mình mua hộ vé. Biết \(t_i\) là thời gian cần thiết để người \(i\) mua xong vé cho mình. Nếu người \(i+1\) rời khỏi hàng và nhờ người \(i\) mua hộ vé thì thời gian để người thứ \(i\) mua được vé cho cả hai người là \(r_i\).

Yêu cầu: Xác định xem những người nào cần rời khỏi hàng và nhờ người đứng trước mua hộ vé để tổng thời gian phục vụ bán vé là nhỏ nhất.

Input

  • Dòng đầu tiên chứa số \(N\) (\(1 \le N \le 60\,000\)).
  • Dòng thứ hai ghi \(N\) số nguyên dương (\(1 \le t_i \le 30\,000\)).
  • Dòng thứ ba ghi \(N-1\) số nguyên dương \(r_i, r_{i+1}, r_{i+2}, r_{i+3}..., r_{N-1}\) (\(1 \le r_i \le 30\,000\)).

Output

In ra tổng thời gian phục vụ nhỏ nhất

Sample Input

5
2 5 7 8 4
4 9 10 10

Sample Output

18

Nhận xét


  • 0
    Nguoingu45  đã bình luận lúc 2 tháng 6 năm 2023, 2:10 p.m.

    include<bits/stdc++.h>

    using namespace std;

    int main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); long long n; cin >> n; vector<long long>t(60000+23); vector<long long>r(30000+23); vector<long long>F(60000+23); for(long long i = 1;i<=n;i++) cin >> t[i]; for(long long i = 1;i<n;i++) cin >> r[i]; F[0] = 0; F[1] = t[1]; for(long long i = 2;i<=n;i++){ F[i] = min(F[i-1]+t[i],F[i-2]+r[i-1]); } cout << F[n]; return 0; }