#include #include #include #include #include #include #include #include #include #include #define M 1005 #define INF 1061109567 using namespace std; int A[M][M]; int dp[M][M]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ int j,k; for(j=1;j<=n;j++){ for(k=1;k<=m;k++){ scanf("%d",&A[j][k]); } } memset(dp,63,sizeof(dp)); //printf("%d\n",dp[0][0]); dp[1][2]=A[1][1]*A[1][2]; dp[2][1]=A[1][1]*A[2][1]; for(j=1;j<=n;j++){ for(k=1;k<=m;k++){ if(dp[j][k]==INF) continue; dp[j+2][k]=min(dp[j+2][k],dp[j][k]+A[j+1][k]*A[j+2][k]); dp[j][k+2]=min(dp[j][k+2],dp[j][k]+A[j][k+1]*A[j][k+2]); dp[j+1][k+1]=min(dp[j+1][k+1],dp[j][k]+min(A[j][k+1]*A[j+1][k+1],A[j+1][k]*A[j+1][k+1])); //if(j+2==n&&k==m) printf("..%d\n",dp[j+2][k]); //if(j==n&&k+2==m) printf("..%d %d %d\n",dp[j][k],dp[j][k+2],A[j][k+2]*A[j][k+1]); } } //printf("%d\n",dp[2][3]); printf("%d\n",dp[n][m]); } //system("pause"); return 0; }