Editorial for Atcoder Educational DP Contest C - Vacation
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Độ 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:
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; }
Comments
This comment is hidden due to too much negative feedback. Show it anyway.
Không phải ~50011~ là
5e4+11à bạn?This comment is hidden due to too much negative feedback. Show it anyway.
V[j] là gì mn ơi
theo như code mẫu thì
V[j]là số điểm hạnh phúc của hoạt độngjvào thời điểm đang xét (vào ngày thứi) á bạncảm ơn bạn nhiều nhá