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

Problem Description
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.

 
Input
There 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.
 
Output
For 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
 
Source
用一个状压就可了,直接全部枚举,保存最优解,这题要注意,有一个大坑,就是,可能为0,因为,如果全部都是空地,就直接输出0就可以了!
#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的更多相关文章

  1. 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 ...

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

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

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

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

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

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

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

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

  6. HDU 4462Scaring the Birds(枚举所有状态)

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

  7. Regionals 2012 :: HangZhou

    题目传送门排行榜 一个人做了12年北大出的题,自己还是太弱了,图论的知识忘光光,最小生成树裸题写不来,Dijkstra TLE不知道用SPFA. 简单几何(点到线段的距离) + 三分 B Steali ...

  8. 2012 Asia Hangzhou Regional Contest

    Friend Chains http://acm.hdu.edu.cn/showproblem.php?pid=4460 图的最远两点距离,任意选个点bfs,如果有不能到的点直接-1.然后对于所有距离 ...

  9. PAT1118:Birds in Forest

    1118. Birds in Forest (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Some ...

随机推荐

  1. mac 浏览器 强刷快捷键

    windows 浏览器的刷新快捷键F5,强制刷新Ctrl+F5 Mac 系统下浏览器的刷新快捷键 command+R, 强制刷新快捷键为 command+shift+R

  2. gif录制工具

    gif录制工具 This tool allows you to record a selected area of your screen and save it as a Gif. http://s ...

  3. x+2y+3z=n的非负整数解数

    题目:给一个正整数n,范围是[1,10^6],对于方程:x+2y+3z = n,其中x,y,z为非负整数,求有多少个这样的三元组 (x,y,z)满足此等式. 分析:先看x+2y=m,很明显这个等式的非 ...

  4. 一个简单的有向图Java实现

    最近看了点有向图的内容,参考开源项目做了一个简单版本,直接贴代码. /** * 有向图接口,定义需要实现的各个方法,可以选择使用邻接矩阵或者邻接链表来实现 * @param <V> V代表 ...

  5. 精通phthon的条件

    1. 熟知主流硬件体系(x86, x64)2. 熟知 CPython 的具体实现,如若可能至少通读源码三遍以上3. 熟知每条 Python bytecode 如何被解释执行4. 熟知每条 Python ...

  6. iconv装换文件编码格式

    最近在mac上编译xml文本文件的时候用vim打开文件汉字总是显示乱码,修改.vimrc,修改iterm编码格式各种方法都使用遍了.最后通过iconv工具将原来的文件编码格式直接转为UTF-8解决掉. ...

  7. 【 D3.js 选择集与数据详解 — 2 】 使用data()绑定数据

    D3 中绑定数据大多是由 data() 函数来完成的,它是怎样工作的,它与 datum() 有什么区别呢? data()函数能够将数组各项分别绑定到各元素上,而且能够设置绑定的规则.data()还能够 ...

  8. c程序设计语言_习题1-13_统计输入中单词的长度,并且根据不同长度出现的次数绘制相应的直方图

    Write a program to print a histogram of the lengths of words in its input. It is easy to draw the hi ...

  9. Problems encountered while deleting resources.

    Error The project was not built due to “Problems encountered while deleting resources.”. Fix the pro ...

  10. UVA 11916 Emoogle Grid 离散对数 大步小步算法

    LRJ白书上的题 #include <stdio.h> #include <iostream> #include <vector> #include <mat ...