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


Bài tập 5.11: Cho một mảng số nguyên gồm n phần tử. Tìm dãy con gồm m phần tử (m£n) sao cho dãy con này có tổng lớn nhất. (Dãy con là dãy các phần tử liên tiếp nhau trong mảng).
`->` SOS =))))
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>
#define ll long long
using namespace std;
const int N = 1e6 + 5;
int idx = 0;
ll a[N];
ll s = 0;
//duyanhle310
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int n,m;cin >> n >> m;
for (int i = 0; i < n; ++i){
cin >> a[i];
if (i < m) s += a[i];
}
for (int i = 1; i <= n-m; ++i){
ll tmp = s - a[i-1] + a[i+m-1];
if (tmp > s){
idx = i;
s = tmp;
}
}
for (int i = idx; i < idx+m; ++i)cout<<a[i]<<" ";
}
Đáp án:
Giải thích các bước giải:
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Đáp án:
# NNLT python
# chọn 1 trong 2, đừng copy phần sau dấu #:
# nếu phải nhập n, m và mảng khi chạy chương trình:
n=int(input())
m=int(input())
A=[]
maxs=0 #giá trị lớn nhất của tổng s
s=0
anchor=0 #chỉ số bắt đầu của dãy cần tìm
for i in range(m):
num=int(input())
A.append(num)
s+=num
maxs=s
for i in range(m,n):
num=int(input())
A.append(num)
s+=num
s-=A[i-m]
if s>maxs:
maxs=s
anchor=i-m+1
for i in range(anchor, anchor+m):
print(A[i], end=' ')
#nếu đề cho sẵn dữ liệu:
n=<giá trị của n, bạn tự nhập>
m=<giá trị của m>
A=[<phần tử 1>,<phần tử 2>,...]
maxs,s,anchor=0,0,0
for i in range(m):
s+=A[i]
maxs=s
for i in range(m,n):
s+=A[i]
s-=A[i-m]
if s>maxs:
maxs=s
anchor=i-m+1
for i in range(anchor, anchor+m):
print(A[i], end=' ')
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin
2039
4457
1673
đổi sang ngôn ngữ python được không ạ ?. Mình đang học python ấy ạ.