题目链接:Problem - 4462

题面:

 题意:一片n*n的农田,现在有k个地方的庄稼被鸟吃了,现在农夫想在这k个地方放稻草人,每个稻草人会保护曼哈顿距离为ri的农田,问最少需要几个稻草人能让剩下的庄稼不被吃,如果不行输出-1

思路:dfs,最多10个稻草人,枚举每种状态即可,被破坏了的地不用保护;

如果样例为

2

4

1 1 2 2 1 2 2 1

0 0 0 0

答案为0

保护的形状为菱形

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
int n;
int k;
int x[15], y[15];
bool s[55][55];
int z[15];
int ans = 15;
bool vis[55][55];
int cnt;
void dfs(int a, int b, int c){ //第几个稻草人,已经拿了几个稻草人,已经保护的面积大小if(a == k){return ;}dfs(a + 1, b, c); //不要这个稻草人的情况int xx = x[a];int yy = y[a];vector<pair<int, int>> ve;for(int i = 0; i <= z[a]; i++){for(int j = 0; j <= z[a] - i; j++){if(vis[xx][yy] == 0 && s[xx][yy] == 0){ve.push_back({xx, yy});vis[xx][yy] = 1;cnt++;}yy++;if(yy > n){break;}}xx++;if(xx > n){break;}yy = y[a];}xx = x[a];yy = y[a];for(int i = 0; i <= z[a]; i++){for(int j = 0; j <= z[a] - i; j++){if(vis[xx][yy] == 0 && s[xx][yy] == 0){ve.push_back({xx, yy});vis[xx][yy] = 1;cnt++;}yy--;if(yy == 0){break;}}xx++;if(xx > n){break;}yy = y[a];}xx = x[a];yy = y[a];for(int i = 0; i <= z[a]; i++){for(int j = 0; j <= z[a] - i; j++){if(vis[xx][yy] == 0 && s[xx][yy] == 0){ve.push_back({xx, yy});vis[xx][yy] = 1;cnt++;}yy ++;if(yy > n){break;}}xx--;if(xx == 0){break;}yy = y[a];}xx = x[a];yy = y[a];for(int i = 0; i <= z[a]; i++){for(int j = 0; j <= z[a] - i; j++){if(vis[xx][yy] == 0 && s[xx][yy] == 0){ve.push_back({xx, yy});vis[xx][yy] = 1;cnt++;}yy --;if(yy == 0){break;}}xx--;if(xx == 0){break;}yy = y[a];}if(c + ve.size() == n * n - k){ans = min(ans, b + 1);}else{dfs(a + 1, b + 1, c + ve.size());}for(int i = 0; i < ve.size(); i++){xx = ve[i].first;yy = ve[i].second;vis[xx][yy] = 0;}
}
int main(){ios::sync_with_stdio(false);while(cin >> n){if(n == 0){break;}cin >> k;memset(vis, 0, sizeof(vis));memset(s, 0, sizeof(s));for(int i = 0; i < k; i++){cin >> x[i] >> y[i];s[x[i]][y[i]] = 1;}for(int i = 0; i < k; i++){cin >> z[i];}if(n * n - k == 0){cout << 0 << endl;continue;}ans = 15;cnt = 0;dfs(0, 0, 0);if(ans == 15){ans = -1;}cout << ans << endl;}return 0;
}

Scaring the Birds dfs hdu-4462相关推荐

  1. hdu 5325 Crazy Bobo dfs

    // hdu 5325 Crazy Bobo // // 题目大意: // // 给你一棵树,树上每一个节点都有一个权值w,选择尽可能多的节点, // 这些节点相互联通,而且依照权值升序排序之后得到节 ...

  2. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  3. HDU 1426 Sudoku Killer【DFS 数独】

    自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视.  据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品 ...

  4. [HDU 1427]速度计算24点(DFS暴力搜索)

    主题连接:  http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表示当前已经算出的值是sum,括号里算 ...

  5. hdu 5692 Snacks(dfs序+线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692 解题思路:这道题是树节点的点权更新,而且涉及到子树,常用的思路是利用dfs序,用线段树来对区间进 ...

  6. hdu 5424(dfs搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5424 官方题解: 如果图是联通的,可以发现如果存在哈密顿路径,一定有一条哈密顿路径的一端是度数最小的点 ...

  7. hdu 4358(莫队算法+dfs序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 解题思路:用dfs求出整棵树的dfs序列,这样以u为根节点的子树就转化到相对应的区间上了.由于是 ...

  8. HDU(1572),最短路,DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572 很久没写深搜了,有点忘了. #include <iostream> #include ...

  9. hdu 4714 树+DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 本来想直接求树的直径,再得出答案,后来发现是错的. 思路:任选一个点进行DFS,对于一棵以点u为 ...

最新文章

  1. 【原】iOS学习之Xcode8关于控制台不打印错误信息
  2. Spring Aop 日志管理及配置文件的详细配置
  3. ContentValues(Java)
  4. Leetcode987 二叉树的垂序遍历
  5. 设计模式学习之代理模式学习(一)
  6. IDEA突然自动关闭然后无法启动
  7. 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
  8. file_table.c 文件分析 linux1_0\linux\fs\file_table.c
  9. Packet Tracer实验——使用三层交换机实现vlan间的通信(详解)
  10. 什么是压栈操作?指令:PUSH src ;src为16位操作数
  11. 人口增量超过北上广!二线城市是怎样逆袭的?
  12. 公开课精华 | 移动机器人视觉三维感知的现在与将来
  13. Unreal Engine 4 —— 多线程任务构建
  14. python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色
  15. POJ-3264-Balanced Lineup
  16. 电脑显示器尺寸对照表_三分钟带你了解五花八门的显示器参数,买显示器不在跳坑...
  17. WKWebView详解
  18. html实现贪吃蛇游戏(源码)
  19. 轩逸android 苹果 蓝牙,【图】Iphone与轩逸车载蓝牙连接的小技巧
  20. execl筛选去重_excel表格如何去除重复数据进行筛选

热门文章

  1. Html+css 实现一个阿里巴巴注册信息web界面
  2. 《css+html小案例3》小米商城手机部分:利用浮动+弹性盒子布局
  3. element 年份区间选择器
  4. 使用JavaMail群发邮件
  5. 用JS实现一个网页版节拍器
  6. Python采集双色球历史开奖信息,看看哪个号中奖概率更大
  7. 【玩转数据系列十三】机器学习算法基于信用卡消费记录做信用评分
  8. Nowcoder 英语作文
  9. 小程序-----Vscode中微信小程序插件
  10. vscode微信小程序插件配置