Xếp hàng mua vé

Xem dạng PDF

Gửi bài giải


Điểm: 0,05 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Nguồn bài:
VNOI Marathon '08 - Practice Round
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Có ~N~ người sắp hàng mua vé dự buổi hoà 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é, song người bán vé được phép bán cho mỗi người tối đa hai 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 \leq N \leq 60000)~.
  • Dòng thứ hai ghi ~N~ số nguyên dương ~t_{1}~, ~t_{2}~, ..., ~t_{N}~. ~(1 \leq t_{i} \leq 30000)~
  • Dòng thứ ba ghi ~N-1~ số nguyên dương ~r_{1}~, ~r_{2}~, ..., ~r_{N-1}~. ~(1 \leq r_{i} \leq 30000)~

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

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -3
    a3k27_13_nguyenvantai  đã bình luận lúc 30, Tháng 3, 2024, 15:48

    include<bits/stdc++.h>

    using namespace std; using ll = long long; const int N = 1e6 + 9; ll dp[600009][3], i, j, n, a[N], b[N]; int main() {

    define taskname ""

    if (fopen (taskname".inp", "r"))
    {
        freopen (taskname".inp", "r", stdin);
        freopen (taskname".out", "w", stdout);
    }
    cin.tie (0)->sync_with_stdio (0);
    cin >> n;
    for (i = 1; i <= n; i++) cin >> a[i];
    for (i = 2; i <= n; i++) cin >> b[i];
    dp[1][0] = 1e18;
    dp[1][1] = a[1];
    for (i = 2; i <= n; i++)
    {
        dp[i][1] = 1e18;
        dp[i][0] = dp[i - 1][1] - a[i - 1] + b[i];
        dp[i][1] = min (dp[i - 1][0], dp[i - 1][1]) + a[i];
    }
    cout << min (dp[n][1], dp[n][0]);
    return 0;
    

    }


  • -3
    thanhhoang  đã bình luận lúc 23, Tháng 1, 2024, 19:01

    Quy Hoạch Động f[n] = t[n]; f[i] = min( t[i] + f[i + 1], r[i] + f[i + 2] ) ( i : n - 1 --> 1 )


    • -4
      thanhhoang  đã bình luận lúc 23, Tháng 1, 2024, 19:02

      => f[1]


  • -11
    Cuunon311  đã bình luận lúc 8, Tháng 10, 2023, 4:14

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -27
    kevininyourarea  đã bình luận lúc 14, Tháng 4, 2023, 1:46

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -28
    NguyenDongAnh  đã bình luận lúc 9, Tháng 9, 2022, 14:29 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 23
    sickboy1368  đã bình luận lúc 11, Tháng 1, 2022, 6:46

    quy hoạch động so sánh ( f[i-1] + t[i] ) với ( f[i-2] + r[i-1] )


    • -46
      nictysine1  đã bình luận lúc 16, Tháng 2, 2022, 8:41 chỉnh sửa

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -325
    ltphuc  đã bình luận lúc 20, Tháng 4, 2021, 3:45

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -120
      nngovannhhungg  đã bình luận lúc 15, Tháng 1, 2022, 7:19

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -131
      manhtuan22007  đã bình luận lúc 27, Tháng 11, 2021, 12:54

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -131
      ekhoavvdd  đã bình luận lúc 22, Tháng 11, 2021, 16:31

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.