VOI 09 Bài 1 - Trò chơi với băng số

Xem dạng PDF

Gửi bài giải


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

Nguồn bài:
Thi HSG Quốc gia 2009
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Trò chơi với băng số là trò chơi tham gia trúng thưởng được mô tả như sau: Có một băng hình chữ nhật được chia ra làm ~n~ ô vuông, đánh số từ trái qua phải bắt đầu từ 1. Trên ô vuông thứ ~i~ người ta ghi một số nguyên dương ~a_{i}~, ~i = 1, 2, \dots, n~. Ở một lượt chơi, người tham gia trò chơi được quyền lựa chọn một số lượng tùy ý các ô trên băng số. Giả sử theo thứ tự từ trái qua phải, người chơi lựa chọn các ô ~i_{1}, i_{2}, \dots, i_{k}~. Khi đó điểm số mà người chơi đạt được sẽ là:

  • ~a_{i_1} - a_{i_2} + \dots + (-1)^{k-1} a_{i_k}~

Yêu cầu: Hãy tính số điểm lớn nhất có thể đạt được từ một lượt chơi.

Input

  • Dòng đầu tiên chứa số nguyên dương ~n~ ~(n \leq 10^{6})~ là số lượng ô của băng số;
  • Dòng thứ hai chứa ~n~ số nguyên dương ~a_{1}, a_{2}, \dots, a_{n}~ ~(a_{i} \leq 10^{4}, i = 1, 2, \dots, n)~ ghi trên băng số. Các số liên tiếp trên cùng dòng được ghi cách nhau bởi ít nhất một dấu cách.

Output

  • Một số nguyên duy nhất là số điểm lớn nhất có thể đạt được từ một lượt chơi.

Giới hạn

60% số tests ứng với 60% số điểm của bài có ~1 \leq n \leq 20~.

Sample Input

7
4 9 2 4 1 3 7

Sample Output

17

Note

image


Bình luận

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



  • 1
    dangminh  đã bình luận lúc 27, Tháng 6, 2025, 13:27 chỉnh sửa

    Hint bài này:

    dùng quy hoạch động

    dp[i][0] là số điểm lớn nhất đến i và điểm tại đó là dương

    dp[i][1] tương tự nhưng điểm tại đó là âm

    duyệt i từ trái sang phải với mỗi dp[i] có 2 trạng thái là chọn hoặc ko chọn.

    tại dp[i][0] nếu chọn thì là dp[i][0] thì dp[i][1] + a[i]

    nếu ko chọn thì ta phải tìm đến trạng thái dương trước đó hay chính là dp[i][0]

    => dp[i][0] = max(dp[i-1][0],dp[i-1][1] + a[i])

    tại dp[i][1] tương tự có dp[i][1] = max(dp[i-1][0] - a[i],dp[i-1][1])

    vậy ct truy hồi là

    Với mỗi i từ 1->n

    dp[i][0] = max(dp[i-1][0],dp[i-1][1] + a[i])

    dp[i][1] = max(dp[i-1][0] - a[i],dp[i-1][1])


  • -3
    ijk  đã bình luận lúc 3, Tháng 11, 2024, 15:33

    cho em hỏi tại sao không chọn hết vậy ạ? Theo em nếu chọn hết thì nó sẽ là: 9 - 2 + 4 - 1 + 7 - 3 + 4 = 18. Vậy tối đa là 18 chứ sao 17 ạ?


    • 1
      Trn115  đã bình luận lúc 4, Tháng 11, 2024, 14:43

      Hình như đề nói "theo thứ tự từ trái sang phải" mà


    • 1
      Trn115  đã bình luận lúc 4, Tháng 11, 2024, 14:43

      Hình như đề nói "theo thứ tự từ trái sang phải" mà