задача про кузнечика

В одной из горных долин под ясным и чистым небом располагалось небольшое озеро. На водной глади озера в ряд плавали несколько кувшинок. На каждой кувшинке существовало некоторое количество волшебной травы. А на самой первой кувшинке сидел кузнечик. Как известно, кузнечики в той долине очень любят питаться волшебной травой. Но наш кузнечик может перемещаться вдоль кувшинок только в одну сторону. Кроме этого, он может перепрыгивать за раз либо через одну кувшинку, либо через две. Каждый раз, когда кузнечик оказывается на кувшинке, он забирает себе всю траву с неё. Цель кузнечика – собрать как можно больше травы. Вам известно, сколько кувшинок было на озере и сколько травы было на каждой кувшинке. Напишите программу, которая по этим данным выведет, какое максимальное количество волшебной травы может собрать кузнечик, добравшись до последней кувшинки.

Первая строка входного файла содержит единственное число N – количество кувшинок (0 ≤ N ≤ 105).

Во второй строке находятся N чисел, где каждое число Ti равно количеству травы на i-той кувшинке (-109 ≤ Ti ≤ 109).

решить используя только библиотеку iostream

Написал такой код, вроде работает, но на каком то из тестов проваливается из за слишком большого времени выполнения. Помогите, как можно оптимизировать этот код, или покажите более быстрый способ

#include <iostream>
using namespace std;

int kuzn(int* a, int n, int i, int prig)
{
    int k = a[i] + a[i+prig];
    i += prig;
        if (a[i+3] > a[i+2] && n - (i + 3) != 1 && (i + 3) <= n)
        {
            k += a[i + 3];
            i += 3;
        }
        else
        {
            if (n - (i + 2) != 1)
            {
                k += a[i + 2];
                i += 2;
            }
            else
                if (n - (i + 3) != 1 && (i + 3) <= n)
                {
                    {
                        k += a[i + 3];
                        i += 3;
                    }
                }
    }
        return k;
}

int kuznechik(int* a, int n, int i)
{
    int k = a[i];
    while (i < n)
    {
        if (kuzn(a, n, i,3) > kuzn(a, n, i,2) && n - (i + 3) != 1 && (i + 3) <= n)
        {
            k += a[i + 3];
            i += 3;
        }
        else
        {
            if (n - (i + 2) != 1)
            {
                k += a[i + 2];
                i += 2;
            }
            else
                if (n - (i + 3) != 1 && (i + 3) <= n)
                {
                    {
                        k += a[i + 3];
                        i += 3;
                    }
                }
        }
    }
    return k;
}

int main()
{

    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int n;
    cin >> n;
    int a[1000];
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    cout << kuznechik(a, n - 1, 0);
}