It’s harvest season now! 
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.

InputThere are several test cases. 
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.OutputFor each test case, print the minimum number of scarecrows farmer John must buy in a line. If John has no way to protect all the corn, print -1 instead.Sample Input

4
2
2 2 3 3
1 3
4
2
2 2 3 3
1 4
0

Sample Output

-1
1

原来状态压缩就是二进制啊。
这题注意读题,距离不是半径,而是只能上下左右走过去,走一次算一步。
用二进制状态压缩最多也就2^10.美滋滋

附ac代码:
  1 #include <cstdio>
2 #include <iostream>
3 #include <cmath>
4 #include <string>
5 #include <cstring>
6 #include <algorithm>
7 using namespace std;
8 const int maxn = 111;
9 typedef long long ll;
10 const int inf = 0x3f3f3f3f;
11 int mp[maxn][maxn];
12 struct nod
13 {
14 int x,y;
15 int r;
16 }nu[maxn];
17 int vis[maxn];
18 int n,k;
19 int a,b;
20 int c;
21 double getd(int x1,int x2,int y1,int y2)
22 {
23 double ans=abs(x1-x2)+abs(y1-y2);
24 return ans;
25 }
26 int main() {
27 while(scanf("%d",&n),n)
28 {
29 memset(vis,0,sizeof(vis));
30 memset(mp,0,sizeof(mp));
31 scanf("%d",&k);
32
33 for(int i=0;i<k;++i)
34 {
35 scanf("%d%d",&a,&b);
36 nu[i].x=a;
37 nu[i].y=b;
38 mp[a][b]=1;
39 }
40 for(int i=0;i<k;++i)
41 {
42 scanf("%d",&nu[i].r);
43 }
44 int len=(1<<k);
45 int minn=inf;
46 for(int i=0;i<len;++i)
47 {
48 memset(mp,0,sizeof(mp));
49 memset(vis,0,sizeof(vis));
50 for(int u=0;u<k;++u)
51 mp[nu[u].x][nu[u].y]=1;
52 for(int j=0;j<k;++j)
53 {
54
55 vis[j]=i&(1<<j);
56 // printf("%di %d(1<<j) %dj %dvis\n",i,(i<<j)&1,j,vis[j]);
57
58 if(vis[j])
59 {
60
61 for(int u=1;u<=n;++u)
62 {
63 for(int v=1;v<=n;++v)
64 {
65 if(!mp[u][v] && nu[j].r>=getd(nu[j].x,u,nu[j].y,v))
66 {
67 mp[u][v]=1;
68 }
69 }
70 }
71 }
72 }
73 int flag=0;
74 for(int u=1;u<=n;++u)
75 {
76 for(int v=1;v<=n;++v)
77 {
78 if(!mp[u][v])
79 {
80 flag=1;
81 break;
82 }
83 }
84 if(flag==1)
85 break;
86 }
87 int cnt=0;
88 if(!flag)
89 {
90 for(int u=0;u<k;++u)
91 {
92 if(vis[u])
93 {
94 cnt++;
95 // printf("%dcnt\n",cnt);
96 }
97 }
98 // printf("%d %d\n",minn,cnt);
99 minn=min(cnt,minn);
100 }
101 }
102 if(minn!=inf)
103 printf("%d\n",minn);
104 else printf("-1\n");
105 }
106 return 0;
107 }

HDU - 4462 Scaring the Birds的更多相关文章

  1. HDU 4462 Scaring the Birds (暴力枚举DFS)

    题目链接:pid=4462">传送门 题意:一个n*n的区域,有m个位置是能够放稻草人的.其余都是玉米.对于每一个位置(x,y)所放稻草人都有个作用范围ri, 即abs(x-i)+ab ...

  2. HDU 4462 Scaring the Birds (暴力求解,二进制法)

    题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...

  3. [dfs+水] hdu 4462 Scaring the Birds

    题意: N*N的矩阵中有M个点能够放稻草人.且给覆盖距离R 每一个稻草人能覆曼哈顿距离R以内的点 问最少须要多少个稻草人 思路: 由于范围非常小,直接能够暴力 注意稻草人所在的位置是不须要被覆盖的 代 ...

  4. hdu4462 Scaring the Birds

    Scaring the Birds Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. HDU 4462:Scaring the Birds(暴力枚举+状态压缩)

    http://acm.hdu.edu.cn/showproblem.php?pid=4462 题意:有一个n*n的地图,有k个空地可以放稻草人,给出每个空地可以放的稻草人属性,属性中有个R代表这个位置 ...

  6. HDU 4462

    http://acm.hdu.edu.cn/showproblem.php?pid=4462 一道题意不清的水题 题意:给一个n*n的格子,在上面放草人,每个草人有恐惧范围,问最少选择几个草人可以覆盖 ...

  7. hdu 4462(状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4462 思路:由于数据不大,可以直接将所有的状态表示出来,然后枚举,判断能否将方格全部覆盖. http: ...

  8. HDU 4462(暴力枚举)

    因为题目当中的k比较小k <= 10,所以可以直接枚举,题目里面由两个trick, 一个是如果每个点都可以放稻草人的话,那么答案是0, 另外一个就是如果可以放稻草人的点不用被照到.知道了这两个基 ...

  9. hdu 4462 第37届ACM/ICPC 杭州赛区 J题

    题意:有一块n*n的田,田上有一些点可以放置稻草人,再给出一些稻草人,每个稻草人有其覆盖的距离ri,距离为曼哈顿距离,求要覆盖到所有的格子最少需要放置几个稻草人 由于稻草人数量很少,所以状态压缩枚举, ...

随机推荐

  1. 环境配置-Java-02-卸载

    1.卸载程序 在windows程序与功能中卸载Java相关的两个程序 2.删除环境变量 在windows环境变量中删除JAVA_HOME.CLASSPATH 以及 PATH中的两条路径 3.查看是否卸 ...

  2. 1.2V升压到3V和3.3V的升压芯片

    1.2V镍氢电池升压到3V和3.3V输出,1.2V升压3V,1.2V升压3.3V稳压输出供电的芯片. PW5100 是一款低静态电流.达效率. PFM 模式控制的同步升压变换器. PW5100 所需的 ...

  3. Java基础复习2

    三目运算符 语法:条件判断?表达式1:表达式2; 如果条件判断成立则获取值1否则获取值2 public class demo1{     public static void main(String[ ...

  4. 阿里云VOD(三)

    一.视频播放器 参考文档:https://help.aliyun.com/document_detail/125570.html?spm=a2c4g.11186623.6.1083.1c53448bl ...

  5. 自翻------Office 2013 RT 使用说明

    Office Home and Student 2013 RT Preview的更新 介绍 Microsoft已发布Microsoft Office Home and Student 2013 RT ...

  6. 命名秘籍周获近五千星——GitHub 热点速览 v.21.04

    作者:HelloGitHub-小鱼干 命名一直是编程界的难点,这次 naming-cheatsheet 就能帮上你的忙.按照它的 SID(Short..Intuitive.Descriptive)原则 ...

  7. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  8. 使用Python的pandas模块、mplfinance模块、matplotlib模块绘制K线图

    目录 pandas模块.mplfinance模块和matplotlib模块介绍 pandas模块 mplfinance模块和matplotlib模块 安装mplfinance模块.pandas模块和m ...

  9. Bitter.Core系列十:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 Log 日志

    Bitter 框架的 Log 全部采用 NLog 日志组件.Bitter.Core 的 执行语句的日志记录 Nlog 日志级别为:info.  如果想要查看Bitter.Core 的执行SQL,先要去 ...

  10. Webpack4.0各个击破(5)module篇

    一. 模块化乱炖 脚本合并是基于模块化规范的,javascript模块化是一个非常混乱的话题,各种[*MD]规范乱飞还要外加一堆[*.js]的规范实现.现代化前端项目多基于框架进行开发,较为流行的框架 ...