bzoj1054: [HAOI2008]移动玩具
我只希望今年HAOI有这样的题目...爆搜即可
#include<bits/stdc++.h> using namespace std; int a[6][6],b[6][6],ans=9999999,len1=0,len2=0; bool f[20]; struct one { int x,y; }; one e1[30],e2[30]; void dfs(int p,int sum) { if(p>len1){ans=min(ans,sum);return;} for(int i=1;i<=len1;i++) { if(f[i])continue; f[i]=true; sum+=abs(e1[p].x-e2[i].x)+abs(e1[p].y-e2[i].y); dfs(p+1,sum); f[i]=false; sum-=abs(e1[p].x-e2[i].x)+abs(e1[p].y-e2[i].y); } } int main() { for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) { char ch;cin>>ch; if(ch=='1')a[i][j]=1; } for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) { char ch;cin>>ch; if(ch=='1')b[i][j]=1; if(b[i][j]==1&&a[i][j]==1) { a[i][j]=0;b[i][j]=0; } } for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++) { if(a[i][j]) { e1[++len1].x=i; e1[len1].y=j; } if(b[i][j]) { e2[++len2].x=i; e2[len2].y=j; } } } dfs(1,0); printf("%d\n",ans); return 0; }