// http://prologin.org/training/challenge/demi2008/pathfinder #include #include #define MAX(x,y) ((x>y)?x:y) int main() { int n = 0; scanf("%d\n", &n); unsigned **map = (unsigned int **)malloc(n*sizeof(unsigned int *)); unsigned **path = (unsigned int **)malloc(n*sizeof(unsigned int *)); for(int i = 0; i < n; i++) { map[i] = (unsigned int *)malloc(n*sizeof(unsigned int)); path[i] = (unsigned int *)malloc(n*sizeof(unsigned int)); } for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) scanf("%u", &map[i][j]); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) path[i][j] = 0; // Programmation dynamique path[0][0] = map[0][0]; path[0][1] = path[0][0] + map[0][1]; path[1][0] = path[0][0] + map[1][0]; for(int i = 1; i < n; i++) for(int j = 1; j < n; j++) path[i][j] = map[i][j] + MAX(path[i-1][j], path[i][j-1]); printf("%u\n", path[n-1][n-1]); for(int i = 0; i < n; i++) { free(map[i]); map[i] = NULL; free(path[i]); path[i] = NULL; } free(map); map = NULL; free(path); path = NULL; return 0; } // main()