

Bài 2. (5 điểm) Dãy con có tổng lớn nhất
Cho dãy số nguyên a1, a2, .., aN. Một dãy con liên tiếp có dạng ai, ai+1, .., aj với 1 ≤ i ≤ j ≤ N, tổng của dãy con liên tiếp ai, ai+1, .., aj là ai + ai+1 + .. + aj.
Yêu cầu: Cho dãy số nguyên a1, a2, .., aN. Tìm dãy con liên tiếp có tổng lớn nhất?
Dữ liệu: vào từ tệp văn bản TONGMAX.INP gồm:
Kết quả: ghi ra tệp văn bản TONGMAX.OUT gồm một số duy nhất là tổng của dãy con tìm được.
Ví dụ:
TONGMAX.INP TONGMAX.OUT
6 18
3 8 -2 4 5 -1
Giới hạn:
ngôn ngữ c++
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
int main() {
freopen("TONGMAX.inp", "r", stdin);
freopen("TONGMAX.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
long long ans = -1e18, cur = 0;
for (int i = 1; i <= n; i++) {
cur = cur + a[i];
ans = max(ans, cur);
cur = max(cur, 0ll);
}
cout << ans;
return 0;
}Hãy giúp mọi người biết câu trả lời này thế nào?
/*
#khanhtaon(*^▽^*)
*/
#include <bits/stdc++.h>
using namespace std;
int n, t, m = INT_MIN;
vector <int> ma, qhd;
int main()
{
cin >> n;
for(int a = 0; a < n; a++)
{
cin >> t;
ma.push_back(t);
if(a == 0) qhd.push_back(t);
else
{
qhd.push_back(qhd[a-1]+t);
if(qhd[a] > m) m = qhd[a];
}
}
for(int a = 0; a < n - 1; a++)
for(int b = a+1; b < n; b++)
if(qhd[b] - qhd[a] > m) m = qhd[b] - qhd[a];
cout << m;
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
251
2761
187
a ey cin.tie(nullptr); cin.tie(0) cin.tie(NULL) nó có khác j nhau k ạ?