#include #include #include #include #include using namespace std; int maxn = 1000 + 5; int a[1009][1009]; int dp[1009][1009]; int n, m; int main() { while(scanf("%d%d", &n, &m) == 2) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { scanf("%d", &a[i][j]); } } for(int i = 0; i <= n; i++) { for(int j = 0; j <= m; j++) { dp[i][j] = 0; } } for(int i = 1; i <= m; i++) { if(i % 2 == 0) { dp[1][i] = dp[1][i-1] + a[1][i-1]*a[1][i]; } else { dp[1][i] = dp[1][i-1]; } } for(int i = 1; i <= n; i++) { if(i % 2 == 0) { dp[i][1] = dp[i-1][1] + a[i-1][1]*a[i][1]; } else { dp[i][1] = dp[i-1][1]; } } for(int i = 2; i <= n; i++) { for(int j = 2; j <= m; j++) { int t = i + j; if(t % 2 == 0) { if(dp[i][j-1] < dp[i-1][j]) dp[i][j] = dp[i][j-1]; else dp[i][j] = dp[i-1][j]; } else { dp[i][j] = min(dp[i-1][j] + a[i-1][j]*a[i][j], dp[i][j-1] + a[i][j-1]*a[i][j]); } } } cout << dp[n][m] << endl; } return 0; }