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

浙公网安备 33010602011771号