HDU 4770 Lights Against Dudely 暴力枚举+dfs
又一发吐血ac,,,再次明白了用函数(代码重用)和思路清晰的重要性。
| 11779687 | 2014-10-02 20:57:53 | Accepted | 4770 | 0MS | 496K | 2976 B | G++ | czy |
Lights Against Dudely
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1360 Accepted Submission(s): 392
Some rooms are indestructible and some rooms are vulnerable. Dudely's machine can only pass the vulnerable rooms. So lights must be put to light up all vulnerable rooms. There are at most fifteen vulnerable rooms in the bank. You can at most put one light in one room. The light of the lights can penetrate the walls. If you put a light in room (x,y), it lights up three rooms: room (x,y), room (x-1,y) and room (x,y+1). Dumbledore has only one special light whose lighting direction can be turned by 0 degree,90 degrees, 180 degrees or 270 degrees. For example, if the special light is put in room (x,y) and its lighting direction is turned by 90 degrees, it will light up room (x,y), room (x,y+1 ) and room (x+1,y). Now please help Dumbledore to figure out at least how many lights he has to use to light up all vulnerable rooms. Please pay attention that you can't light up any indestructible rooms, because the goblins there hate light.好像状压更简单:
http://www.cnblogs.com/kuangbin/p/3416163.html
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map>
#include<string>
//#include<pair> #define N 205
#define M 15
#define mod 10000007
//#define p 10000007
#define mod2 100000000
#define ll long long
#define LL long long
#define maxi(a,b) (a)>(b)? (a) : (b)
#define mini(a,b) (a)<(b)? (a) : (b) using namespace std; int n,m;
int ans;
int k;
int vis[N][N];
char s[N][N];
int c[N];
int step[][][]={ {-,,,,,},
{,-,-,,,},
{,-,,,,},
{,,,,,}
};
typedef struct
{
int x;
int y;
}PP; PP p[N]; void change(int x,int y,int st[][],int s)
{
int i;
int nx,ny;
for(i=;i<;i++){
nx=x+st[i][];
ny=y+st[i][];
if(nx< || nx>=n) continue;
if(ny< || ny>=m) continue; vis[nx][ny]=s;
}
} int judge(int x,int y,int st[][])
{
int i;
int nx,ny;
for(i=;i<;i++){
nx=x+st[i][];
ny=y+st[i][];
if(nx< || nx>=n || ny< || ny>=m) continue;
if(s[nx][ny]=='#'){
return ;
}
}
return ;
} void ini()
{
int i,j;
memset(c,,sizeof(c));
ans=;
k=;
for(i=;i<n;i++){
scanf("%s",s[i]);
}
for(i=n-;i>=;i--){
for(j=;j<m;j++){
if(s[i][j]=='.'){
k++;
p[k].x=i;p[k].y=j;
}
}
} for(i=;i<=k;i++){
if(judge(p[i].x,p[i].y,step[])==){
c[i]=;
}
else{
c[i]=-;
}
}
} void dfs(int i,int f,int re)
{
if(re>=ans){
return;
}
if(i==k+){
ans=re;
return;
}
if(vis[ p[i].x ][ p[i].y ]==)
{
dfs(i+,f,re);
}
if(f!=i && c[i]==){
change(p[i].x,p[i].y,step[],);
dfs(i+,f,re+);
change(p[i].x,p[i].y,step[],);
}
} void solve()
{
int i,j;
if(k==){
ans=;return;
}
memset(vis,,sizeof(vis));
dfs(,,);
for(j=;j<=;j++)
{
memset(vis,,sizeof(vis));
for(i=;i<=k;i++){
if(judge( p[i].x,p[i].y,step[j] )==){
change(p[i].x,p[i].y,step[j],);
dfs(,i,);
change(p[i].x,p[i].y,step[j],);
}
}
}
} void out()
{
if(ans==) ans=-;
printf("%d\n",ans);
} int main()
{
// freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
//scanf("%d",&T);
// for(int ccnt=1;ccnt<=T;ccnt++)
// while(T--)
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n== && m== ) break;
//printf("Case %d: ",ccnt);
ini();
solve();
out();
} return ;
}
HDU 4770 Lights Against Dudely 暴力枚举+dfs的更多相关文章
- hdu 4770 Lights Against Dudely(回溯)
pid=4770" target="_blank" style="">题目链接:hdu 4770 Lights Against Dudely 题 ...
- HDU 4770 Lights Against Dudely (2013杭州赛区1001题,暴力枚举)
Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 4770 Lights Against Dudely
Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 4770 Lights Against Dudely(暴力+状压)
思路: 这个题完全就是暴力的,就是代码长了一点. 用到了状压,因为之前不知道状压是个东西,大佬们天天说,可是我又没学过,所以对状压有一点阴影,不过这题中的状压还是蛮简单的. 枚举所有情况,取开灯数最少 ...
- HDU 4462 Scaring the Birds (暴力枚举DFS)
题目链接:pid=4462">传送门 题意:一个n*n的区域,有m个位置是能够放稻草人的.其余都是玉米.对于每一个位置(x,y)所放稻草人都有个作用范围ri, 即abs(x-i)+ab ...
- 状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
题目传送门 题意:有n*m的房间,'.'表示可以被点亮,'#'表示不能被点亮,每点亮一个房间会使旁边的房间也点亮,有意盏特别的灯可以选择周围不同方向的房间点亮.问最少需要多少灯使得所有房间点亮 分析: ...
- HDOJ 4770 Lights Against Dudely
状压+暴力搜索 Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 4770 Lights Against DudelyLights
Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 1172 猜数字(暴力枚举)
题目 这是一道可以暴力枚举的水题. //以下两个都可以ac,其实差不多一样,呵呵 //1: //4 wei shu #include<stdio.h> struct tt { ],b[], ...
随机推荐
- 贴一发STL源码
int my_lower_bound(int size, long long key){ int first = 0, middle; int half, len; len = si ...
- Robot Framework(十二) 执行测试用例——配置执行
3.4配置执行 本节介绍可用于配置测试执行或后处理输出的不同命令行选项.与生成的输出文件相关的选项将在下一节中讨论. 3.4.1选择测试用例 通过测试套件和测试用例名称 按标签名称 当没有测试匹配选择 ...
- Maven01
1. Maven简单介绍 Apache Maven是个项目管理和自动构建工具,基于项目对象模型(POM)的概念. 作用:完成项目的相关操作,如:编译,构建,单元测试,安装,网站生成和基于Maven部 ...
- python_108_格式化字符串format函数
#通过关键字映射 print('I am {name},age {age}'.format(name='qiqi齐',age=18))#I am qiqi齐,age 18 dictory={'name ...
- a标签点击后更改颜色
function choose(id){ document.getElementById("typeid").value = id; //var infoa=document.ge ...
- UVa-156-反片语
这题比较精妙的是,我们对于单词重排,实际上是进行了标准化的处理,即按照字典序排序. 这样的话,就很方便地处理了单词的重排问题,我们不需要使用全排列函数进行排列尝试,我们直接化简为一,然后进行比较就可以 ...
- [LUOGU] P1908 逆序对
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...
- leetcode-3-basic-divide and conquer
解题思路: 因为这个矩阵是有序的,所以从右上角开始查找.这样的话,如果target比matrix[row][col]小,那么就向左查找:如果比它大,就 向下查找.如果相等就找到了,如果碰到边界,就说明 ...
- MPEG-4视频编码核心思想
1 引言 当今时代,信息技术和计算机互联网飞速发展,在此背景下,多媒体信息已成为人类获取信息的最主要载体,同时也成为电子信息领域技术开发和研究的热点.多媒体信息经数字化处理后具有易于加密.抗干扰能 ...
- Spark——为数据分析处理提供更为灵活的赋能
本文来自网易云社区 作者:王佳楠 一.概述 现如今在大规模数据处理分析的技术领域中,Hadoop及其生态内的各功能组件占据了绝对的统治地位.Hadoop原生的MapReduce计算框架由于任务抽象简单 ...