#include #include #define MAX_N 1100 int N; int misto[MAX_N][MAX_N]; int soucet_misto[MAX_N][MAX_N]; int soucet(int sloupec, int radek){ if(radek == N+1){ // Jsme už mimo, tedy tu nic nezískáme. return 0; } if(soucet_misto[radek][sloupec] == 0){ // Ještě toto místo není spočítané. int soucet_l = soucet(sloupec, radek+1); int soucet_p = soucet(sloupec+1, radek+1); if(soucet_l > soucet_p){ soucet_misto[radek][sloupec] = soucet_l + misto[radek][sloupec]; }else{ soucet_misto[radek][sloupec] = soucet_p + misto[radek][sloupec]; } } return soucet_misto[radek][sloupec]; } int main(void) { scanf(" %d", &N); for(int i = 1; i <= N; i++){ for(int j = 1; j <= i; j++){ scanf(" %d", &misto[i][j]); } } printf("%d\n", soucet(1,1)); return 0; }