• TASOJ
  • Trang chủ
  • Danh sách bài
  • Các bài nộp
  • Thành viên
  • Các kỳ thi
  • Thông tin
    >
    • Máy chấm
    • Custom Checkers
    • Github
VI EN Đăng nhập  hoặc  Đăng ký

Blog - Trang 1

  • Thông tin
  • Thống kê
  • Blog

0

solution for https://oj.tlualgosec.com/problem/dayso

hoangggp đã đăng vào 16, Tháng 7, 2023, 22:20

Gọi ~f[i]~ là hàm mục tiêu của bài toán.

Với mỗi phần thứ j ta xét 2 phần tử i và k. Nhận thấy: $$f(i,j,k)=a_i + 2a_j + 3a_k$$ Nên chúng ta cần tìm ~a[i]~ và ~a[j]~ sao cho ~a[i] + a[j]~ là lớn nhất có thể. Mà ~a[i]~ và ~a[j]~ là rời rạc nên việc tìm ~a[i] + a[j]~ sao cho chúng lớn nhất tương đương với việc tìm ~a[i]~ lớn nhất và ~a[j]~ lớn nhất.

Gọi ~h[i]~ là giá trị lớn nhất từ ~i = 1 \rightarrow i~ của ~a[i]~. Ta có thể tính được ~h[i]~ $$ \begin{cases} h[1] = a[1] \\ h[i] = max(h[i-1], a[i]) ~~~ \text{if} \ \ i \geq 2 \end{cases} $$

Gọi ~g[i]~ là giá trị lớn nhất từ ~i=n \rightarrow i~ của a[i]. Tương tự ta tính được ~g[i]~ $$ \begin{cases} g[n] = a[n] \\ g[i] = max(g[i+1], a[i]) ~~~ \text{if} \ \ i \leq n-1 \end{cases} $$

Sau khi tính được ~h[i]~ và ~g[i]~, ta tính được f[i]: $$ f[i] = \max(f[i-1], h[i-1] + 2a[i] + 3g[i+1]) ~~~ \forall i=2,3,\dots,n-1 $$

hoangggp
o16, Tháng 7, 2023, 22:20 0

dựa trên nền tảng DMOJ | theo dõi TLU AlgoSec trên Github và Facebook