Pagini recente » Cod sursa (job #1136308) | Cod sursa (job #496457) | Cod sursa (job #2366251) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #466600)
Cod sursa(job #466600)
#include <cstdio>
#include <string>
#include <cstring>
#define MAXN 100010
using namespace std;
int n, A[MAXN], val1[MAXN], val2[MAXN], i, j, st, dr;
long long V1[MAXN], V2[MAXN];
int main ()
{
freopen ("numarare.in", "r", stdin);
freopen ("numarare.out", "w", stdout);
scanf ("%d", &n);
for (i = 1; i <= n; i++) scanf ("%d", A + i);
for (i = n; i >= 1; i--)
{
memcpy (V2, V1, sizeof (V1));
memcpy (val2, val1, sizeof (val1));
memset (V1, 0, sizeof (V1));
memset (val1, 0, sizeof (val1));
for (j = i + 1; j <= n; j++)
{
st = i; dr = j;
//printf ("%d %d\n", st, dr);
if ((st + dr - 1) & 1)
{
V1[dr] = max (V2[dr], V1[dr - 1]);
continue;
}
// printf ("%d %d\n", st, dr);
if (st < dr - 1)
{
if (val2[dr - 1] == A[st] + A[dr])
{
V1[dr] = V2[dr - 1] + V1[dr - 1] + V2[dr] + 1;
val1[dr] = val2[dr - 1];
}
}
else if (st == dr - 1)
V1[dr] = 1, val1[dr] = A[st] + A[dr];
}
}
printf ("%lld\n", V1[n]);
return 0;
}