HDU 4462 枚举
来源:互联网 发布:手机qq网络硬盘在哪里 编辑:程序博客网 时间:2024/06/18 17:35
HDU 4462
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4454
题意:
n*n(<=50)的地图上有稻草,有m(<=10)个点没有稻草可以放稻草人,问最少放几个稻草人,能守卫所有稻草。不能守卫所有稻草输出-1。
思路:
复现的时候各种乱搞。
然而枚举就可以啊,枚举就可以啊~
为什么这样写不会超时,都1e7了……
注意:可以放稻草人的地方不用守卫
源码:
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <cstdlib>#include <string>#include <queue>#include <vector>using namespace std;#define inf (1000000007)const int MAXN = 50 + 5;int x[MAXN], y[MAXN], r[MAXN];int vis[MAXN][MAXN];int dis(int x1, int y1, int x2, int y2){ return abs(x1 - x2) + abs(y1 - y2);}int main(){ int n, m; while(scanf("%d", &n) != EOF && n){ scanf("%d", &m); memset(vis, 0, sizeof(vis)); for(int i = 0 ; i < m ; i++) scanf("%d%d", &x[i], &y[i]), vis[x[i]][y[i]] = 1; for(int i = 0 ; i < m ; i++) scanf("%d", &r[i]); if(m == 0){ printf("-1\n"); continue; } int ans = inf; for(int i = 0 ; i < (1 << m) ; i++){ int ok = 0; for(int t1 = 1 ; t1 <= n ; t1++){ for(int t2 = 1 ; t2 <= n ; t2++){ if(vis[t1][t2] == 1){ ok = 1; continue; } ok = 0; for(int j = 0 ; j < m ; j++){ if(i & (1 << j)){ if(dis(t1, t2, x[j], y[j]) <= r[j]){ ok = 1; break; } } } if(ok == 0){ break; } } if(ok == 0) break; } if(ok){ int cnt = 0; for(int j = 0 ; j < m ; j++) if(i & (1 << j)) cnt++; ans = min(ans, cnt); } } if(ans == inf) printf("-1\n"); else printf("%d\n", ans); } return 0;}
0 0
- HDU 4462 枚举
- hdu 4462 构造子集+枚举
- HDU 4462 状压枚举。
- hdu——4462(暴力枚举)
- HDU 4462 Scaring the Birds (枚举+暴搜)
- HDU-4462(状态压缩,枚举)
- hdu 3332 暴力枚举
- hdu 4007 枚举 Dave
- hdu 4068 枚举 SanguoSHA
- hdu 1015 Safecracker(枚举)
- hdu 1087 枚举+DP
- hdu 1158 枚举+DP
- hdu-1425(排序||枚举)
- HDU 4353 枚举
- HDU 3823 暴力枚举
- HDU 4380 预处理枚举
- hdu 4334 Trouble 枚举。。。。
- hdu 2208 DFS枚举
- leetcode | 数组中的逆序对
- C语言实现链表之单向链表(三)创建链表
- svn不支持中文路径问题的解决
- Mi one修改hosts
- 【转】ubuntu的防火墙安装、开启和关闭
- HDU 4462 枚举
- 多核mips异常分析(1)
- HDU 4460 SPFA
- C语言实现链表之单向链表(四)清空链表
- LESS 原理及使用方式
- Android 系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)
- NOIP2015酱油记
- C语言实现链表之单向链表(五)头结点前插入结点
- 数组中出现次数超过一半的数字