题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵。

析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有一个坑,就是那些指定的位置是可以不用覆盖的,

当时WA一次。

代码如下:

  1. #include <cstdio>
  2. #include <string>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <iostream>
  6. #include <cstring>
  7. #include <set>
  8. #include <queue>
  9. #include <algorithm>
  10. #include <vector>
  11. #include <map>
  12. using namespace std ;
  13.  
  14. typedef long long LL;
  15. typedef pair<int, int> P;
  16. const int INF = 0x3f3f3f3f;
  17. const double inf = 0x3f3f3f3f3f3f3f;
  18. const double eps = 1e-8;
  19. const int maxn = 1000 + 5;
  20. const int dr[] = {0, 0, -1, 1};
  21. const int dc[] = {-1, 1, 0, 0};
  22. int m, n;
  23. //int x[55], y[55];
  24. int f[55];
  25. int Find(int x){ return x == f[x] ? x : f[x] = Find(f[x]); }
  26. struct node{
  27. int r, c, R;
  28. double d;
  29. bool operator < (const node &p) const{
  30. return d < p.d;
  31. }
  32. };
  33. node a[15];
  34. int ans;
  35.  
  36. int solve(int s){
  37. vector<int> v;
  38. for(int i = 0; i < m; ++i){
  39. if(s & (1<<i)) v.push_back(i);
  40. }
  41.  
  42. if(v.size() >= ans) return INF;
  43. for(int i = 1; i <= n; ++i){
  44. for(int j = 1; j <= n; ++j){
  45. bool ok = false;
  46. for(int k = 0; k < m; ++k)
  47. if(a[k].r == i && a[k].c == j){ ok = true; break; }
  48. if(ok) continue;
  49. for(int k = 0; k < v.size(); ++k){
  50. if(abs(a[v[k]].r-i)+abs(a[v[k]].c-j) <= a[v[k]].R){ ok = true; break; }
  51. }
  52. if(!ok) return INF;
  53. }
  54. }
  55. return v.size();
  56. }
  57.  
  58. int main(){
  59. while(scanf("%d", &n) == 1 && n){
  60. scanf("%d", &m);
  61. for(int i = 0; i < m; ++i)
  62. scanf("%d %d", &a[i].r, &a[i].c);
  63. for(int i = 0; i < m; ++i) scanf("%d", &a[i].R);
  64.  
  65. ans = INF;
  66. for(int i = 0; i < (1<<m); ++i){
  67. ans = min(ans, solve(i));
  68. }
  69. printf("%d\n", ans == INF ? -1 : ans);
  70. }
  71. return 0;
  72. }

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

    It's harvest season now! Farmer John plants a lot of corn. There are many birds living around his co ...

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

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

  4. UVa 1151 Buy or Build (最小生成树+二进制法暴力求解)

    题意:给定n个点,你的任务是让它们都连通.你可以新建一些边,费用等于两点距离的平方(当然越小越好),另外还有几种“套餐”,可以购买,你购买的话,那么有些边就可以连接起来, 每个“套餐”,也是要花费的, ...

  5. hdu4462 Scaring the Birds

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

  6. POJ 1562(L - 暴力求解、DFS)

    油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...

  7. 逆向暴力求解 538.D Weird Chess

    11.12.2018 逆向暴力求解 538.D Weird Chess New Point: 没有读好题 越界的情况无法判断,所以输出任何一种就可以 所以他给你的样例输出完全是误导 输出还搞错了~ 输 ...

  8. 隐型马尔科夫模型(HMM)向前算法实例讲解(暴力求解+代码实现)---盒子模型

    先来解释一下HMM的向前算法: 前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率.我们先来看看前向算法是如何求解这个问题的. 前向算法本质上属于动态规划的算法,也就是 ...

  9. UVa 818Cutting Chains (暴力dfs+位运算+二进制法)

    题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...

随机推荐

  1. ha_innobase::rnd_next

    /*****************************************************************//** Reads the next row in a table ...

  2. Websocket和PHP Socket编程

    本来是搜一些html5 websocket资料看的,结果被引去看了php的socket编程.下面是一些简单的例子,在命令行运行php脚本就行 [命令行运行PHP]PHP中有一个php.exe文件,可以 ...

  3. jQuery实战读书笔记(备忘录)

    选择器备忘: | :even 匹配所有索引值为偶数的元素,从 0 开始计数 :odd 匹配所有索引值为奇数的元素,从 0 开始计数 实例——设置table交替行变色: <script type= ...

  4. handler.post 为什么要将thread对象post到handler中执行呢?

    转载网址:http://www.cnblogs.com/crazypebble/archive/2011/03/23/1991829.html在Android中使用Handler和Thread线程执行 ...

  5. 字符集编码Unicode ,gb2312 cp936

    这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一:使用Windows记事本的“另存为” ...

  6. gtid

    GTID的全称为 global transaction identifier,可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建.GTID需要在全局的主-备拓扑结构中保持唯一性, ...

  7. WebForm+Web.config: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。

    ylbtech-Error-WebForm+Web.config: 超时时间已到.在操作完成之前超时时间已过或服务器未响应. 超时时间已到.在操作完成之前超时时间已过或服务器未响应. 1.A,错误代码 ...

  8. android总结

    针对Android有以下几点需要注意: 1.是不是应该把数据刷新操作放在onResume()中?     @Override     public void onResume() {          ...

  9. 简单把webdriver的find_element方法写成函数

    __author__ = 'jyd' from selenium.webdriver.common.by import By #driver webdriver实例化对象 #element 查询元素的 ...

  10. WEB安全性测试测试用例(基础)

    建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL 注入.身份验证和授权错误. 输入验证 客户端验证服务器端验证(禁用脚本调试,禁用Cookies) 1.输入很大的数(如4,294,967, ...