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
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; }