[dfs+水] hdu 4462 Scaring the Birds
2024-09-18 01:59:19
题意:
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;
}
最新文章
- ARM概论(Advanced RISC Machines)
- 系统UINavigationController使用相关参考
- 【原】Storm学习资料推荐
- offsetWidth、offsetleft 等图文详解
- 安装完 MySQL 后必须调整的 10 项配置
- couchdb and redis
- SCGHR 分析思路
- HDU 3255 Farming
- Css Secret 案例Demo全套
- SQL Server 实现类似C#中 PadLeft功能
- ACM Sudoku
- NLP&;深度学习:近期趋势概述
- 匿名函数gc分析
- 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)
- 84直方图最大矩形覆盖 &#183; Largest Rectangle in Histogram
- nodejs 接收上传的图片
- tsort - 拓扑排序
- (4.2)基于LingPipe的文本基本极性分析【demo】
- 类方法load和initialize的区别
- C# http post上传文件