题意:

N*N的矩阵中有M个点能够放稻草人。且给覆盖距离R

每一个稻草人能覆曼哈顿距离R以内的点

问最少须要多少个稻草人

思路:

由于范围非常小,直接能够暴力

注意稻草人所在的位置是不须要被覆盖的

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
using namespace std;
int map[55][55];
int n,m;
int ans;
struct point
{
int x,y,r;
}p[11];
void dfs(int x,int sum)
{
if(x==m)
{
int f=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(map[i][j]!=0) continue;
int k;
for(k=0;k<m;k++)
{
if(map[p[k].x][p[k].y]==-1) continue;
if(abs(i-p[k].x)+abs(j-p[k].y)<=p[k].r) break;
}
if(k==m)
{
f=0;
break;
}
}
if(!f) break;
}
if(f) ans=min(ans,sum);
return ;
}
dfs(x+1,sum);
map[p[x].x][p[x].y]=p[x].r;
dfs(x+1,sum+1);
map[p[x].x][p[x].y]=-1;
}
int main()
{
while(scanf("%d",&n),n)
{
memset(p,0,sizeof(p));
memset(map,0,sizeof(map));
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
map[p[i].x][p[i].y]=-1;
}
for(int i=0;i<m;i++) scanf("%d",&p[i].r);
ans=99;
dfs(0,0);
printf("%d\n",ans==99?-1:ans);
}
return 0;
}

最新文章

  1. ARM概论(Advanced RISC Machines)
  2. 系统UINavigationController使用相关参考
  3. 【原】Storm学习资料推荐
  4. offsetWidth、offsetleft 等图文详解
  5. 安装完 MySQL 后必须调整的 10 项配置
  6. couchdb and redis
  7. SCGHR 分析思路
  8. HDU 3255 Farming
  9. Css Secret 案例Demo全套
  10. SQL Server 实现类似C#中 PadLeft功能
  11. ACM Sudoku
  12. NLP&amp;深度学习:近期趋势概述
  13. 匿名函数gc分析
  14. 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)
  15. 84直方图最大矩形覆盖 &#183; Largest Rectangle in Histogram
  16. nodejs 接收上传的图片
  17. tsort - 拓扑排序
  18. (4.2)基于LingPipe的文本基本极性分析【demo】
  19. 类方法load和initialize的区别
  20. C# http post上传文件

热门文章

  1. GUI练习——列出指定目录内容
  2. ASPから広がり
  3. MYSQL group_concat() 函数
  4. HDU 4983 Goffi and GCD
  5. centos 磁盘扩容,新建lv
  6. linux中时间函数
  7. Node.js笔记3
  8. zoj 3197 Google Book
  9. Servlet 的基本架构
  10. HDU2005-第几天