题目链接:

pid=4462">传送门

题意:一个n*n的区域,有m个位置是能够放稻草人的。其余都是玉米。对于每一个位置(x,y)所放稻草人都有个作用范围ri,

即abs(x-i)+abs(y-j)<=r,(i,j)为作用范围内。问至少要在几个位置上放稻草人,才干覆盖全部的玉米,若不可能则输出-1。

有一个trick,就是放稻草人的位置不用被覆盖

eg:

input:

2 4

1 1 1 2 2 1 2 2

0 0 0 0

output:

0 0

代码例如以下:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; const int maxn = 60; struct point{
int x,y,wide;
point(){}
point(int _x,int _y):x(_x),y(_y){}
}p[maxn]; int mp[maxn][maxn];
int n,k; bool check(){
int tot=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
tot+=(mp[i][j]>0);
}
return tot==n*n;
} bool flag; void modify(point p,int wide,int val){
for(int i=max(1,p.x-wide);i<=min(n,p.x+wide);i++)
for(int j=max(1,p.y-wide);j<=min(n,p.y+wide);j++){
if(abs(i-p.x)+abs(j-p.y)<=wide&&mp[i][j]!=10000)
mp[i][j]+=val;
}
} void dfs(int num,int id,int tot){
if(tot>num) return;
if(tot==num){
if(check())
flag=1;
return;
}
if(flag||id>=k) return;
modify(p[id],p[id].wide,1);
dfs(num,id+1,tot+1);
modify(p[id],p[id].wide,-1);
dfs(num,id+1,tot);
} int main()
{
while(~scanf("%d",&n)&&n){
scanf("%d",&k);
for(int i=0;i<k;i++){
int x,y;
scanf("%d%d",&x,&y);
p[i]=point(x,y);
mp[x][y]=10000;
}
for(int i=0;i<k;i++){
scanf("%d",&p[i].wide);
}
int ans = 100000000;
for(int i=0;i<=k;i++){
memset(mp,0,sizeof(mp));
for(int j=0;j<k;j++)
mp[p[j].x][p[j].y]=10000;'\'\\
flag = 0;
dfs(i,0,0);
if(flag){
ans = i;
break;
}
}
if(ans!=100000000) printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}
/***
4
2
2 2 3 3
1 3
4
2
2 2 3 3
1 4
2 4
1 1 1 2 2 1 2 2
0 0 0 0
***/

HDU 4462 Scaring the Birds (暴力枚举DFS)的更多相关文章

  1. HDU 4770 Lights Against Dudely 暴力枚举+dfs

    又一发吐血ac,,,再次明白了用函数(代码重用)和思路清晰的重要性. 11779687 2014-10-02 20:57:53 Accepted 4770 0MS 496K 2976 B G++ cz ...

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

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

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

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

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

  5. hdu 1172 猜数字(暴力枚举)

    题目 这是一道可以暴力枚举的水题. //以下两个都可以ac,其实差不多一样,呵呵 //1: //4 wei shu #include<stdio.h> struct tt { ],b[], ...

  6. hdu 4445 Crazy Tank (暴力枚举)

    Crazy Tank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 4930 Fighting the Landlords(暴力枚举+模拟)

    HDU 4930 Fighting the Landlords 题目链接 题意:就是题中那几种牌型.假设先手能一步走完.或者一步让后手无法管上,就赢 思路:先枚举出两个人全部可能的牌型的最大值.然后再 ...

  8. HDU 1270 小希的数表 (暴力枚举+数学)

    题意:... 析:我们可以知道,a1+a2=b1,那么我们可以枚举a1,那么a2就有了,并且a1+a3=b2,所以a3就有了,我们再从把里面的剩下的数两两相加,并从b数组中去掉, 那么剩下的最小的就是 ...

  9. hdu 5491 The Next(暴力枚举)

    Problem Description Let L denote the number of 1s in integer D’s binary representation. Given two in ...

随机推荐

  1. WordPress 增加 keywords 和 description

    WordPress 增加 keywords 和 description . <?php $keywords = '798资源网'; $description = '798资源网'; //文章页 ...

  2. set集合关于set与set进行比较

    containsAll方法用来判断Set集合是否包含另一个集合中的全部内容. 语法  boolean containsAll(Collection<?> c) 返回值:如果Set集合包含参 ...

  3. Python2x,3x源码的区别,编译型解释型,变量,注释,if,用户交互input,基本数据类型3种

    cpu 内存 硬盘 操作系统 ​ cpu: 计算机的运算和计算中心,相当于人类的大脑. ​ 内存:暂时存储数据,临时加载数据应用程序,4G,8G,16G,32G #速度快,造价高,断电即消失 ​ 硬盘 ...

  4. 【xsy2440】【GDOI2016】疯狂动物城

    感受一下这恐怖的题目长度~~~ 其实题意很裸,但是作为GDOI的一道防AK题,自然有他优秀的地方. 简化题意:给出一棵树,要求支持三个操作: 1.修改点值 2.询问点$x$到$y$之间的一些东东 3. ...

  5. UVA-1347 Tour 动态规划 难以确定的状态

    题目链接:https://cn.vjudge.net/problem/UVA-1347 题意 给出按x坐标排序的几个点. 欲从最左边不回头的走到最右边,然后再返回最左边. 每个点都要被访问,且只能经过 ...

  6. Python爬虫简单入门及小技巧

    刚刚申请博客,内心激动万分.于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法. 目标 前几天上B站时看到一 ...

  7. JMS消息

    1.消息可分为3部分:消息头.属性和有效负载 消息头:用于标识消息.声明消息属性及提供路由信息的特殊字段组成. 消息的属性区包含了和该消息有关的附加元数据,这个元数据由应用程序开发者进行设置,或者由J ...

  8. PatentTips - Method for network interface sharing among multiple virtual machines

    BACKGROUND Many computing systems include a network interface card (NIC) to provide for communicatio ...

  9. 洛谷 P1193 洛谷团队训练VS传统团队训练

    P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎 ...

  10. 数组中出现一次的两个数(三个数)& 求最后一位bit为1

    对于两个数,对于结果中,剩余bit1来异或区分. 下面的解法,非常精简: int lastBitOf1(int number) { ); } void getTwoUnique(vector<i ...