/* ID:tianlin2 PROG:numtri LANG:C++ */ #include <iostream> #include <fstream> using namespace std; int nmtr[1000][1000]; int d[1000][1000]; int max(int a,int b,int i1,int j1,int i2,int j2,int row) { if(i1<0||j1<0||j1>=row) a=0; if(i2<0||j2<0||j2>=row) b=0; if(a>b) return a; return b; } /* int findmax(int i,int j,int row) { if(i<0||j<0||j>=row) return 0; return max(findmax(i-1,j-1,row-1),findmax(i-1,j,row-1))+nmtr[i][j]; } */ int endfind(int a[],int n) { int max=0; for(int i=0;i!=n;++i){ if(a[i]>max) max=a[i]; } return max; } int main() { ifstream fin("numtri.in"); ofstream fout("numtri.out"); int r; fin>>r; for(int i=0;i!=r;++i) for(int j=0;j!=i+1;++j) fin>>nmtr[i][j]; int *maxnum=new int[r]; for(int i=0;i!=r;++i){ for(int j=0;j!=i+1;++j){ d[i][j]=max(d[i-1][j-1],d[i-1][j],i-1,j-1,i-1,j,i+1)+nmtr[i][j]; } } for(int i=0;i!=r;++i){ maxnum[i]=d[r-1][i]; } /* for(int i=0;i!=r;++i){ maxnum[i]=findmax(r-1,i,r); } */ fout<<endfind(maxnum,r)<<endl; //system("pause"); return 0; }