

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
`*` Tư tưởng: Ta sử dụng mảng cộng dồn để lưu tổng từ 1 -> i. Sau đó ta lấy giá trị nhỏ nhất bằng cách tính độ chênh lệnh với tất cả vị trí 1 -> n, tổng từ 1 đến i là d[i], tổng từ i -> n là d[n] - d[i] (lấy tổng tất cả trừ cho tổng từ `1 -> i`)
$\texttt{C++}$
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin >> n;
vector<long long> a(n);
for (long long i = 0; i < n; i++)
{
cin >> a[i];
}
vector<long long> d(n + 1, 0);
for (long long i = 1; i <= n; i++)
{
d[i] = d[i - 1] + a[i - 1];
}
long long mi = d[n];
for (long long i = 1; i <= n; i++)
{
mi = min(mi, abs(d[n] - d[i] - d[i]));
}
cout << mi;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin