Hướng dẫn giải của Atcoder Educational DP Contest C - Vacation


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Tác giả: dquynh_2811

Độ phức tạp: ~O(N)~

Gọi dp[i][j] (~i: 1 \rightarrow n, j: 0 \rightarrow 2~ đại diện cho các hoạt động ~A~, ~B~, ~C~) là số điểm hạnh phúc tối đa mà Taro có thể nhận được khi tham gia các hoạt động trong ~i~ ngày đầu tiên mà hoạt động thực hiện vào ngày thứ ~i~ là hoạt động ~j~. Với điều kiện Taro không thể thực hiện các hoạt động giống nhau trong hai hoặc nhiều ngày liên tiếp, ví dụ như vào ngày thứ ~i~, Taro muốn tham gia hoạt động ~A~, thì ngày thứ ~i-1~, Taro chỉ có thể thực hiện các hoạt động ~B~ hoặc ~C~ nên ta có công thức QHĐ sau:

~dp[i][j] = max_{k≠j} (dp[i−1][k]+V[j])~

Với dp[i][j] khởi tạo nhận giá trị bằng ~0~. Kết quả cần tìm chính là ~max(dp[N][0],~ ~dp[N][1],~ ~dp[N][2]).~

#include <bits/stdc++.h>

using namespace std;

const int mx = 1e5 + 11;

int dp[mx][3];

int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);

    int N; cin >> N;

    for(int i = 1; i <= N; ++i) {
        int a, b, c; cin >> a >> b >> c;
        dp[i][0] = max(dp[i - 1][1] + a, dp[i - 1][2] + a);
        dp[i][1] = max(dp[i - 1][0] + b, dp[i - 1][2] + b);
        dp[i][2] = max(dp[i - 1][0] + c, dp[i - 1][1] + c);
    }

    cout << max({dp[N][0], dp[N][1], dp[N][2]}) << endl;
}

Bình luận

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



  • -25
    madinhdinh  đã bình luận lúc 30, Tháng 10, 2022, 4:19

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


    • 9
      darkkcyan  đã bình luận lúc 30, Tháng 10, 2022, 4:25 sửa 2

      Không phải ~50011~ là 5e4+11 à bạn?


      • -19
        madinhdinh  đã bình luận lúc 2, Tháng 11, 2022, 12:46 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.


  • -1
    thanh20092007  đã bình luận lúc 27, Tháng 9, 2022, 1:47 chỉnh sửa

    V[j] là gì mn ơi


    • 3
      tachithanhdanh  đã bình luận lúc 27, Tháng 9, 2022, 3:17

      theo như code mẫu thì V[j] là số điểm hạnh phúc của hoạt động j vào thời điểm đang xét (vào ngày thứ i) á bạn


      • -1
        thanh20092007  đã bình luận lúc 27, Tháng 9, 2022, 3:34

        cảm ơn bạn nhiều nhá