一种类型的DP,记录上面的量的最优值。
#include <stdio.h>

int num[351];

int max(int a, int b)
{

    
if (a >= b)return a;
    
return b;
}


int main()
{

    
int n;
    
int i, j;
    
int t;
    
while (scanf("%d"&n) != EOF)
    
{
        
for (i=0; i<n; i++)
        
{
            num[i] 
= 0;
        }


        
for (i=0; i<n; i++)
        
{
            
for (j=i; j>=0; j--)
            
{
                scanf(
"%d"&t);
                
if (j==0)
                
{
                    num[j] 
+= t;
                }

                
else 
                
{
                    
if (j==i)
                    
{
                        num[j] 
= num[j-1+ t;
                    }

                    
else
                    
{
                        num[j] 
= max(num[j-1+ t, num[j] + t);
                    }

                }

            }

        }

        
for (j=num[0], i=1; i<n; i++)
        
{
            
if (num[i] > j)
            
{
                j 
= num[i];
            }

        }

        printf(
"%d\n", j);
    }

    
return 0;
}