Code tìm tổng lớn nhất của tất cả các chuỗi con mà không có 2 phần tử nào đứng cạnh nhau bị sai

Cho một mảng gồm các số nguyên hãy tìm tổng lớn nhất của tất cả các chuỗi con mà không có 2 phần tử nào đứng cạnh nhau trong chuỗi con đó.
Với arr = [1,4,1] thì đầu ra của MaximumNonAdj(arr) = 4 . Các chuỗi con không có 2 phần tử nào liền kề nhau là (1), (4), (1), (1,1) trong đó chuỗi có tổng lớn nhất là 4.
Cho e hỏi công thức của em như thế này thì sai ở đâu vậy ạ

int MaximumNonAdj(std::vector<int> arr)
{
    int Max=*max_element(arr.begin(), arr.end());
    int *f = new int [arr.size() + 1];
    f[0]=arr[0];
    f[1]=max(f[0], arr[1]);
    for(int i=2;i<arr.size();i++)
    {
        f[i]=max(max(f[i-2]+arr[i], f[i-1]), f[i-2]);
    }
    return max(Max,*max_element(f, f+arr.size()));
}

ý tưởng của e là xét tới vị trí i thì f[i] là max của f[i-2] nếu lấy thì + thêm arr[i] nếu ko thì ko cộng
và max của f[i-1] và ko lấy arr[i]

ai giúp em với ạ :3 …

Bạn có test case (input + output) nào sai ko :smiley:

4 Likes

có test ở trên đề á a
A: 1 4 1
thì có 4 chuỗi con ko liền kề là 1 , 4 , 1 , 11
tổng chuỗi con lớn nhất là 4
161, -75, -54, 163, -63 -> 324
121, -63, -110, 86 -> 207
-104, 46, 79 -> 79
hết rồi ạ :3 e bị sai mấy test ẩn nên k biết nữa

(à chuyển đổi nhầm)

Test nào có 2 số âm ở giữa 2 số dương thì f[1] là âm nên f[3] không thể cập nhật được.
Bạn nên chia trường hợp âm-dương vì số không dương không thể đóng góp gì, trừ phi tổng đang âm.

Thêm test:

[3,1,1,4] => 7
[3,1,0,2,5] => 8
4 Likes

làm theo công thức của em thì mấy test em gửi lên đúng hết a ạ
còn 2 test của a
F[0]=3
F[1]=max(F[0],arr[1])=3
F[2]=max(3+1, 3 , 3) = 4
F[3]=max(3+4, 4, 4)= 7

còn test 2
F[0]=3
F[1]=3
F[2]=3
F[3]=5
F[4]=8
đúng rồi mà a :3

Dãy toàn số dương thì đúng :smiley: nhưng có số âm thì sẽ bị sai.

3 Likes

mấy cái test có số âm e gửi ở trên là đúng hết luôn á a
tại e xét trường hợp lấy hoặc ko lấy
với Max là phần tử lớn nhất trong dãy…
còn dãy F thì quy hoạch động theo công thức đó … nếu + thêm phần tử thứ i mà nhỏ hơn thì nó k lấy vào dãy đâu nên e nghĩ dãy toàn số âm cũng trả về phần tử lớn nhất
e có xét thêm trường hợp dãy toàn số âm thì trả về 0 mà cũng k đúng :3

test nào vậy anh? em chạy đúng hết mấy test đó luôn á
bị ẩn 3 test case còn lại nên e k biết sai ở đâu
đây là các bộ test code e chạy đúng
161, -75, -54, 163, -63 -> 324
121, -63, -110, 86 -> 207
-104, 46, 79 -> 79
69, 2, -92, 69, 102 -> 171
-32, 157 -> 157
96, 196, 57, 150 -> 346
https://www.ideone.com/ZvSB6Q 6 test này nè a

Còn test sai thì sao khẳng định được là code đúng được :neutral_face:

Sai ở đây rồi. Đề có yêu cầu là dãy con có thể rỗng đâu.

4 Likes

oops a nhập nhầm thành f[1] = arr[1] :facepalm: 6/6 hết, vậy thì lạ thật.

4 Likes

ý e là code e ko xét trường hợp toàn số âm…trường hợp đó e trả về max_element của dãy
nhưng e thử trả về 0 thì nó cũng sai ấy a

Đến nước này thì chắc chắn chỉ còn tràn kiểu dữ liệu thôi. Bạn để arr với f là mảng kiểu long long xem.

3 Likes

em thử rồi ạ…mà vẫn ko đc nên e code trâu luôn

Bạn/ anh ơi, hãy thử với mấy bộ test này thử xem có đúng không nhé…
19 20 3 7 1 6
19 20 9 6 8 7
10 20 9 6 8 7
3 -1 7 2 5 6 -8 10 3 15 1 0 11

1 Like

[20, 7, 6]
[19, 9, 8]
[20, 6, 7]

1 Like

Có case này ra sai thì phải :stuck_out_tongue:

[-2, -3, 2, 1, 2]
expected: 4
actual: 2
3 Likes

Input mà có hai số âm đứng đầu đều gây lỗi, nhưng [] không phải là đáp án.

Vậy phải xét thêm a[i] với max.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?