#include<stdio.h>
#include<string.h>
int r[10],c[10],R[10],ji[10],vis[51][51],n,k,ans;
int abs(int a)
{
if(a>=0)return a;
else return -a;
}
bool pan(int s)
{
int t=0,i,j;
for(i=0;i<k;i++)
if(s&(1<<i))
ji[t++]=i;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(!vis[i][j])
{
int ok=0;
for(int x=0;x<t;x++)
if(abs(i-r[ji[x]])+abs(j-c[ji[x]])<=R[ji[x]])
{
ok=1;break;
}
if(!ok)return false;
}
}
if(ans>t)ans=t;
return true;
}
int main()
{
int i,j,s;
while(scanf("%d",&n)==1&&n)
{
ans=1<<30;
scanf("%d",&k);
memset(vis,0,sizeof(vis));
for(i=0;i<k;i++)
{
scanf("%d%d",&r[i],&c[i]);
vis[r[i]][c[i]]=1;
}
for(i=0;i<k;i++)
scanf("%d",&R[i]);
int ok=0;
for(s=0;s<(1<<k);s++)
{
if(pan(s))ok=1;
}
if(ok)
printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}
hdu4462 Scaring the Birds状态压缩
最新推荐文章于 2017-08-17 21:19:48 发布