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

  

posted @ 2018-01-30 15:28  mybing  阅读(87)  评论(0编辑  收藏  举报