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

好像状压更简单:
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[], ...
随机推荐
- 设置与使用SQL Server的字符集(Collation,即排序规则)
目录 目录 正确认识SQL Server的字符集 选择合适的SQL Server字符集 错误使用SQL Server的字符集 参考资料 正确认识SQL Server的字符集 SQL Server作为一 ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- 第1节 flume:11、flume的failover机制实现高可用
1.4 高可用Flum-NG配置案例failover 在完成单点的Flume NG搭建后,下面我们搭建一个高可用的Flume NG集群,架构图如下所示: 图中,我们可以看出,Flume的存储可以支持多 ...
- PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)
PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15) http://www.patest.cn/contests/pat-b-practise/10 ...
- jExcelAPI导入导出excel
MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式.作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便.在 ...
- bootstrap 翻页(对齐的链接)
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- nginx在windows上面的启动bat文件
因为windows上面zip安装nginx后启动比较麻烦,然后找了一下关于批处理文件的资料,写了一个nginx启动和关闭的脚本. 这个脚本正常情况下是可以使用的.因为脚本中并没有对nginx程序是否在 ...
- 学习笔记(_huaji_)
假如我没有见过太阳,我也许会忍受黑暗. 如果我知道自己会在哪里死去,我就永远都不去那儿.失败的经历,其实也有它的价值. 人的过失会带来错误,但要制造真正的灾难还得用计算机. 嘴角微微上扬已不复当年轻狂 ...
- hihoCoder-1089-Floyd
我们读入的时候,要考虑重边的问题,我们只取边的最小值就可以了. #include <cstdio> #include <cstring> const int INF = 0x3 ...
- 【Java_基础】java类加载过程与双亲委派机制
1.类的加载.连接和初始化 当程序使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来对类进行初始化.如果没有意外,jvm将会连续完成这三个步骤,有时也把这三个步骤统称为 ...