MAXSUM - Dãy con có tổng lớn nhất

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Cho mảng ~A~ gồm ~N~ phần tử. Tìm dãy con gồm các phần tử liên tiếp ~S~ của dãy ~A~ sao cho tổng tất cả các phần tử của ~S~ là lớn nhất và in ra tổng đó.

Input

  • Dòng đầu, chứa số nguyên dương ~N~ ~(1 ≤ N ≤ 1000)~;
  • Dòng tiếp theo gồm ~N~ số nguyên ~A_i~ ~(−10^9 ≤ A_i ≤ 10^9)~.

Output

  • Gồm một số nguyên duy nhất là kết quả của bài toán.

Sample

Input #1
3
1 -3 3
Output #1
3

Problem source: Kc97ble - Free Contest


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    0988440189  đã bình luận lúc 19, Tháng 4, 2025, 11:01

    Ý tưởng cho ae nào quả bí : tư tưởng là preFixSum trước hết anh em tạo mảng S[n+1] phần tử ,S[0]=0, tính tổng các phần tử đoạn [a[0]->a[i]] bằng công thức S[i]=S[i-1]+a[i-1];//tự hiểu nhé -Ở đây nó không giống bài đoạn con có k phần tử cố định , mà phần tử đoạn k có thể thay đổi ,để sao cho tổng sẽ phải lớn nhất từ a[l]->a[r],Vậy ta cứ cố định r trước nhé (r chạy từ 1 ->n) , ta cần tìm *max(S[r]-S[l])*.. (l chạy từ 0 đến r-1), như bạn ở trên bảo duyệt 2 vòng for đẻ tìm cũng được nhưng nó không hay . -S[r] cố định rồi thì ta cần tìm max(-S[l]) đó cũng chính là cần tìm min (S[l]) (tự giải thích nhé ) =>vậy công việc sẽ là tìm min S[l] tại từng vị trí thì ta xét mảng preFMin có n+1 phần tử như sau : preFmin[0]=0;//không chọn thằng nào , từ i=1 đến i<=n thì preFmin[i]=min(preFmin[i-1],prefSum[i]), nghĩa là ta so sánh và chọn thằng nhỏ hơn giữa 2 thằng này Cuối cùng ta sẽ tìm max giữa preF[i]-preFmin[i-1],i chạy từ 1 đến n là AC.. FAN MU MÃI ĐỈNH...


  • -2
    thienhung2008  đã bình luận lúc 14, Tháng 1, 2025, 3:34

    dung hai vong for long nhau cung duoc ma :33


    • 0
      0988440189  đã bình luận lúc 19, Tháng 4, 2025, 10:45

      TLE chắc chắn luôn á


  • 3
    tuanori  đã bình luận lúc 2, Tháng 11, 2024, 17:21

    Hi. Mình comment cái này với mục đích cho bạn nào chưa biết hoặc đã làm được bài trên nhưng muốn tìm hiểu thêm cách làm mới thôi nha. Thuật toán Kadane giúp giải quyết bài toán này nhanh gọn với vỏn vẹn vài dòng code thôi ý


  • 0
    leedat313  đã bình luận lúc 7, Tháng 10, 2024, 16:03

    Các bạn có thể tham khảo lí thuyết để giải bài này ở đây https://wiki.vnoi.info/algo/data-structures/prefix-sum-and-difference-array.md


  • -1
    phidang  đã bình luận lúc 29, Tháng 5, 2024, 14:10

    Bài này input mỗi số trong mảng A nằm trên một dòng.


    • 0
      kidcode_83  đã bình luận lúc 16, Tháng 11, 2024, 10:02

      Cảm ơn bạn,mìn code đúng mà nộp bài toàn báo sai cho đến khi đọc được comment của bạn


  • -2
    NguyenBuiVN  đã bình luận lúc 3, Tháng 3, 2024, 4:17

    Ai giải thích giúp mình với, mình nộp kadane vẫn ac trong khi trường hợp mà cả dãy A là số dương thì lại sai??


    • 0
      NguyenBuiVN  đã bình luận lúc 3, Tháng 3, 2024, 4:18

      là do test chưa quét hết th hay sao v?