玄学

#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;
}

 

posted on 2016-10-24 13:25  fuyun_boy  阅读(242)  评论(0编辑  收藏  举报

导航