hdu4462 Scaring the Birds
Scaring the Birds
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 970 Accepted Submission(s): 329
Farmer John plants a lot of corn. There are many birds living around his corn field. These birds keep stealing his corn all the time. John can't stand with that any more. He decides to put some scarecrows in the field to drive the birds away.
John's field can be considered as an N×N grid which has N×N intersections. John plants his corn on every intersection at first. But as time goes by, some corn were destroyed by rats or birds so some vacant intersections were left. Now John wants to put scarecrows on those vacant intersections and he can put at most one scarecrow on one intersection. Because of the landform and the different height of corn, every vacant intersections has a scaring range R meaning that if John put a scarecrow on it, the scarecrow can only scare the birds inside the range of manhattan distance R from the intersection.

The figure above shows a 7×7 field. Assuming that the scaring range of vacant intersection (4,2) is 2, then the corn on the marked intersections can be protected by a scarecrow put on intersection (4,2).
Now John wants to figure out at least how many scarecrows he must buy to protect all his corn.
For each test case:
The first line is an integer N ( 2 <= N <= 50 ) meaning that John's field is an N×N grid.
The second line is an integer K ( 0<= K <= 10) meaning that there are K vacant intersections on which John can put a scarecrow.
The third line describes the position of K vacant intersections, in the format of r
1,c
1,r
2,c
2 …. r
K,c
k . (r
i,c
i) is the position of the i-th intersection and 1 <= r
1,c
1,r
2,c
2…. r
K,c
k <= N.
The forth line gives the scaring range of all vacant intersections, in the format of R
1,R
2…R
K and 0 <= R
1,R
2…R
K <= 2 × N.
The input ends with N = 0.
2
2 2 3 3
1 3
4
2
2 2 3 3
1 4
0
1
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdio.h>
using namespace std;
#define K 12
#define inf 0x4f4f4f4f
int r[K],c[K],l[K],n,m,edge;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}},visit[55][55],prime[55][55];
int bfs(int sx,int sy,int goal)
{
int i,j,ans=0;
ans=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(!visit[i][j]&&fabs(i-sx)+fabs(j-sy)<=l[goal])
{
visit[i][j]=1;
ans++;
}
}
return ans;
}
bool judge(int num)
{
int i,ans,all=edge;
if(all==0)
return true;
for(i=0;i<m;i++)
{
if(num&(1<<i))
{
all-=bfs(r[i],c[i],i);
//printf("%d all",all);
if(all==0)
return true;
}
}
return false;
}
int main()
{
int i,ans,j;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d",&m);
memset(prime,0,sizeof(prime));
edge=n*n;
for(i=0;i<m;i++)
{
scanf("%d%d",&r[i],&c[i]);
if(!prime[r[i]][c[i]])
{
prime[r[i]][c[i]]=1;
edge--;
}
}
for(i=0;i<m;i++)
scanf("%d",&l[i]);
int all=(1<<m)-1;
int maxx=inf;
for(i=0;i<=all;i++)
{
for(j=0;j<=n;j++)
for(int k=0;k<=n;k++)
{
visit[j][k]=prime[j][k];
}
if(judge(i))
{
ans=i;
int temp=0;
for(j=0;j<m;j++)
{
if(ans&(1<<j))
{
temp++;
}
}
maxx=min(temp,maxx);
}
}
if(maxx!=inf)
printf("%d\n",maxx);
else
printf("-1\n"); }
return 0;
}
hdu4462 Scaring the Birds的更多相关文章
- HDU - 4462 Scaring the Birds
It's harvest season now! Farmer John plants a lot of corn. There are many birds living around his co ...
- HDU 4462 Scaring the Birds (暴力求解,二进制法)
题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...
- [dfs+水] hdu 4462 Scaring the Birds
题意: N*N的矩阵中有M个点能够放稻草人.且给覆盖距离R 每一个稻草人能覆曼哈顿距离R以内的点 问最少须要多少个稻草人 思路: 由于范围非常小,直接能够暴力 注意稻草人所在的位置是不须要被覆盖的 代 ...
- HDU 4462 Scaring the Birds (暴力枚举DFS)
题目链接:pid=4462">传送门 题意:一个n*n的区域,有m个位置是能够放稻草人的.其余都是玉米.对于每一个位置(x,y)所放稻草人都有个作用范围ri, 即abs(x-i)+ab ...
- HDU 4462:Scaring the Birds(暴力枚举+状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=4462 题意:有一个n*n的地图,有k个空地可以放稻草人,给出每个空地可以放的稻草人属性,属性中有个R代表这个位置 ...
- HDU 4462Scaring the Birds(枚举所有状态)
Scaring the Birds Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- Regionals 2012 :: HangZhou
题目传送门排行榜 一个人做了12年北大出的题,自己还是太弱了,图论的知识忘光光,最小生成树裸题写不来,Dijkstra TLE不知道用SPFA. 简单几何(点到线段的距离) + 三分 B Steali ...
- 2012 Asia Hangzhou Regional Contest
Friend Chains http://acm.hdu.edu.cn/showproblem.php?pid=4460 图的最远两点距离,任意选个点bfs,如果有不能到的点直接-1.然后对于所有距离 ...
- PAT1118:Birds in Forest
1118. Birds in Forest (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Some ...
随机推荐
- java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.
java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令
- UVALive - 3713 Astronauts
给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄<ave的宇航员: A任务只能分配给年龄>=ave的宇航员: C任务可以任意分配. 给定m组互相憎恨的 ...
- Java泛型反射机制(一)
/** * * @author Administrator * 功能:泛型的必要性(参数化类型)(安全简单) */ package com.test; import java.util.*; publ ...
- Android 三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现
android三档自定义滑动开关,禁止点击功能的实现,普通开关网上有很多例子,三档滑动开关的则找了整天都没有相关例子,开始用普通开关的源码修改了自己实现了一个类,但效果不如人意,各种边界情况的算法很难 ...
- C语言中的宏总结
宏定义分为两种: 1.变量式宏定义,如 #define abc def #define str "string" #define num 100 2.函数式宏定义, #define ...
- win2003+IIS6+PHP5.3.8+MSSQL2008的安装配置
- poj2761Feed the dogs(划分树-区间K值)
链接 这树着实不好理解啊 讲解http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html 对于找K值 右区间的确定不是太理解..先当 ...
- Master Nginx(5) - Reverse Proxy Advanced Topics
Security through separtion Encrypting traffic with SSL Authenticating clients using SSL Blocking tra ...
- Azure Site Recovery:我们对于保障您的数据安全的承诺
Anoob Backer 云 + Enterprise 项目经理 Azure Site Recovery是一个基于 Azure的全天候.易用的服务,可以安全地安排恢复操作,一旦发生灾难,即可为您 ...
- 动态修改log4net组件的日志文件名
最近项目使用到log4net来记录日志,当然二话不说先到cnblogs上查看一下各位高手关于log4net的教程和心得主要参看了摩诘 的Log4Net使用指南 (确实是非常好的log4net的入门指南 ...