Đăng nhập để hỏi chi tiết


Giúp e vs aaa, giải thích ý tưởng chi tiết, công thức qhđ và code nhé (C++)
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Chú thích soạn luôn trong code
#include <bits/stdc++.h>
using namespace std;
const long long INF = -(1LL << 60);
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, p;
cin >> n >> p;
vector<vector<long long>> a(3, vector<long long>(n + 1));
for (int i = 0; i < 3; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
//điểm lớn nhất
long long dp[3][100005];
for (int i = 0; i < 3; i++)
for (int j = 1; j <= n; j++)
dp[i][j] = INF;
//từ vị trí xuất phát -> dải
for (int i = 0; i < 3; i++)
dp[i][1] = a[i][1];
for (int j = 2; j <= n; j++) {
int l = max(1, j - p);
//giữa -> 2 bên
for (int i = l; i < j; i++) {
dp[0][j] = max(dp[0][j], dp[1][i] + a[0][j]);
dp[2][j] = max(dp[2][j], dp[1][i] + a[2][j]);
//2 bên -> giữa
dp[1][j] = max(dp[1][j],
max(dp[0][i], dp[2][i]) + a[1][j]);
}
}
//đích
//tìm vị trí cuối
long long ans = INF;
for (int j = max(1, n + 1 - p); j <= n; j++) {
ans = max(ans, max(dp[0][j],
max(dp[1][j], dp[2][j])));
}
cout << ans;
return 0;
}Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin