hdu 4770 Lights Against Dudely
来源:互联网 发布:java dom4j解析xml文件 编辑:程序博客网 时间:2024/05/16 09:55
题意:N*M的地图,需要照亮所有的'.'(最多15个),但是'#'不能被照亮,问最多需要多少灯。每盏灯能照亮当前格子,右边格子和上方格子。有一盏特别的灯,能够转向。
思路:暴力。枚举所有状态,找出合法且答案最小的状态。状态有三维,第一维是灯的放置情况,第二维是指哪个灯旋转,第三维表示旋转多少度。
#include <stdio.h>#include <queue>#include <memory.h>#include <iostream>using namespace std;#define INF 1000000000char mp[210][210];int cnt;bool vis[16];int nn[16];int mm[16];bool judge(int a,int b,int c){ memset(vis,0,sizeof(vis)); int cur=1; int aa=a; while(a){ if(a&1){ if(b!=cur){ vis[cur]=1; char U=mp[nn[cur]-1][mm[cur]]; char R=mp[nn[cur]][mm[cur]+1]; if(U=='#')return 0; else vis[U]=1; if(R=='#')return 0; else vis[R]=1; }else{ char U,R; vis[cur]=1; if(c==1){ U=mp[nn[cur]][mm[cur]+1]; R=mp[nn[cur]+1][mm[cur]]; }else if(c==2){ U=mp[nn[cur]+1][mm[cur]]; R=mp[nn[cur]][mm[cur]-1]; }else if(c==3){ U=mp[nn[cur]][mm[cur]-1]; R=mp[nn[cur]-1][mm[cur]]; } if(U=='#')return 0; else vis[U]=1; if(R=='#')return 0; else vis[R]=1; } } cur++; a>>=1; } for(int i=1;i<=cnt;i++)if(!vis[i])return 0; return 1;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ if(n==0&&m==0)break; memset(mp,0,sizeof(mp)); cnt=0; for(int i=1;i<=n;i++){ scanf("%s",mp[i]+1); for(int j=1;j<=m;j++){ if(mp[i][j]=='.'){ mp[i][j]=++cnt; nn[cnt]=i; mm[cnt]=j; } } } if(!cnt){ printf("0\n"); continue; } int end=(1<<cnt); int ans=INF; for(int i=1;i<end;i++){ for(int j=0;j<=cnt;j++){ for(int k=1;k<=3;k++){ int tmp=i; int x=0; while(tmp){ if(tmp&1)x++; tmp>>=1; } if(judge(i,j,k))ans=min(ans,x); } } } if(ans!=INF) printf("%d\n",ans); else printf("-1\n"); } return 0;}
0 0
- hdu 4770 Lights Against Dudely
- HDU:4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely
- HDU 4770 Lights Against Dudely 解题报告
- hdu 4770 Lights Against Dudely(回溯)
- HDU 4770 Lights Against Dudely(暴力)
- hdu 4770 Lights Against Dudely(暴力搜索)
- 【搜索】 HDU 4770 Lights Against Dudely
- hdu 4770 Lights Against Dudely(暴力+状压)
- HDU 4770 Lights Against Dudely(暴力)
- 【android】应用架构一一一一一Activity和Fragment的对比分析
- Hdu 1814 Peaceful Commission(2-sat+输出字典序最小方案)
- 如何更改AVD的默认路径
- Jquery,图片依次进入内容区域,幻灯片
- do you know why localhost=127.0.0.1
- hdu 4770 Lights Against Dudely
- 见机行事【Nhibernate懒加载】
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
- Java 1028 多态
- 如何为JOPtionPane的showConfirmDialog对话框中的按钮设置监听
- Top 5 issues for Instance Eviction (Doc ID 1374110.1)
- 8.22 指针操作问题
- SDUT 2678 5-1 继承与派生
- c++ final class 实现 非final 关键字