/*
//
// main.cpp
// cow bowling
//
// Created by busyfisher on 13-6-20.
// Copyright (c) 2013年 busyfisher. All rights reserved.
//
位置图:
0 0
1 0 1
2 0 1 2
3 0 1 2 3
4 0 1 2 3 4
. ....
Memory: 1236K Time: 157MS
Language: C++ Result: Accepted
递推关系如下:
*/
![](https://img-blog.csdn.net/20130620161719765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDMyOTczOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
#include <iostream>
using namespace std;
#define maxn 350+10
int data[maxn][maxn];
int dp[maxn][maxn];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
cin>>data[i][j];
dp[0][0] = data[0][0];
for(int i = 1;i<n;i++)
for(int j = 0; j <= i; j++){
if( j == 0)
dp[i][j] = dp[i-1][j] + data[i][j];
else if( j < i)
dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + data[i][j];
else
dp[i][j] = dp[i-1][j-1] + data[i][j];
}
int ans = 0;
for(int j = 0;j<n;j++){
if( dp[n-1][j] > ans)
ans = dp[n-1][j];
}
cout<<ans<<endl;
return 0;
}