#include<cstdio>
#define MAXN 5005
#define MIN -32767
int p[MAXN], r[MAXN];
int solve(int n)
{
if(n == 0)
return 0;
int q;
for(int j = 1; j <= n; j++)
{
q = MIN;
for(int i = 1; i <= j; i++)
{
if(q < p[i] + r[j-i])
q = p[i] + r[j-i];
}
r[j] = q;
}
return r[n];
}
int main()
{
int n;
while(~scanf("%d", &n))
{
p[0] = 0;
for(int i = 1; i <= n; i++)
scanf("%d", &p[i]);
int res = solve(n);
printf("%d\n", res);
}
}
此种解法为自底向上的解法。