#include #include #include using namespace std; #define max_int 1000000000 #define min(a,b) (a 0) r1 = data[a-1][b] * data[a][b]; if (b > 0) r2 = data[a][b-1] * data[a][b]; if (r1 < max_int) r1 += min(get(a-2, b), get(a-1, b-1)); if (r2 < max_int) r2 += min(get(a-1, b-1), get(a, b-2)); q = min(r1, r2); result[a][b] = q; } return q; } int main() { int i, j; while (scanf("%d%d", &n, &m) != EOF) { for (i = 0; i < n; i++) for (j = 0; j < m; j++) scanf("%d", &data[i][j]); memset(result, -1, sizeof result); printf("%d\n", get(n-1, m-1)); } }