玄学
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstdio> #include<string> using namespace std; //================================================== int N,M,R,C; int map[20][20],ans[20][20]; int a[20],b[20],SUM=0x3f3f3f3f; int dx[5]={0,1,0,-1,0}; int dy[5]={0,0,1,0,-1}; //================================================== void init(); void bfsh(int); void bfsl(int); void pt(); //================================================== void pt() { for(int i=1;i<=R;i++) printf("%d ",a[i]); cout<<endl; for(int i=1;i<=C;i++) printf("%d ",b[i]); cout<<endl<<endl; } //================================================== void aans() { int sum=0; for(int i=1;i<=R;i++) for(int j=1;j<=C;j++) ans[i][j]=map[a[i]][b[j]]; for(int i=1;i<=R;i++) for(int j=1;j<=C;j++){ for(int k=1;k<=4;k++){ if( j+dx[k]>=1 && j+dx[k]<=C && i+dy[k]>=1 && i+dy[k]<=R ) sum+=abs(ans[i][j]-ans[i+dy[k]][j+dx[k]]); } } if(sum<SUM)SUM=sum; //cout<<sum<<endl; } //================================================== void bfsl(int l) { if(l>C){aans();return;} for(int i=b[l-1]+1;i<=M;i++){ b[l]=i; bfsl(l+1); } } //================================================== void bfsh(int h) { if(h>R){/*pt();*/bfsl(1);return;} for(int i=a[h-1]+1;i<=N;i++){ a[h]=i; bfsh(h+1); } } //================================================== void init() { cin>>N>>M>>R>>C; for(int i=1;i<=N;i++){ for(int j=1;j<=M;j++){ cin>>map[i][j]; } } } //================================================== int main() { init(); bfsh(1); cout<<SUM/2; // system("pause"); return 0; }