hdu1044
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=55;
int n,m,t,x1,y1,x2,y2;
struct node
{
int x,y;
int zb;
int step;
} ft,et;
char ap[maxn][maxn];
int h[11];
bool vis[1100][maxn][maxn];
int dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
int cal(int zb)
{
int i,j,ans=0;
for(i=0,j=1; i<10; i++,j=j*2)
if(j&zb) ans+=h[i];
return ans;
}
void bfs()
{
memset(vis,false,sizeof(vis));
int i,j,ans=-1;
ft.x=x1,ft.y=y1,ft.zb=ft.step=0;
vis[0][x1][y1]=true;
queue<node>q;
q.push(ft);
while(!q.empty())
{
ft=q.front();
q.pop();
for(i=0; i<4; i++)
{
et.x=ft.x+dir[i][0];
et.y=ft.y+dir[i][1];
if(et.x<0||et.y<0||et.x>=n||et.y>=m||ap[et.x][et.y]=='*')continue;
if(ap[et.x][et.y]!='.')et.zb=(ft.zb|(1<<(ap[et.x][et.y]-'A')));
else et.zb=ft.zb;
if(vis[et.zb][et.x][et.y])continue;
vis[et.zb][et.x][et.y]=true;
et.step=ft.step+1;
if(et.x==x2&&et.y==y2)
ans=max(ans,cal(et.zb));
if(et.step==t)continue;
q.push(et);
}
}
if(ans==-1)printf("Impossible\n");
else printf("The best score is %d.\n",ans);
}
int main()
{
int T,tt=0;
scanf("%d",&T);
while(T--)
{
int i,j,k;
scanf("%d%d%d%d",&m,&n,&t,&k);
for(i=0; i<k; i++)scanf("%d",&h[i]);
for(i=0; i<n; i++)
scanf("%s",ap[i]);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(ap[i][j]=='@')
{
x1=i;
y1=j;
ap[i][j]='.';
}
else if(ap[i][j]=='<')
{
x2=i;
y2=j;
ap[i][j]='.';
}
}
}
printf("Case %d:\n",++tt);
bfs();
if(T!=0)printf("\n");
}
return 0;
}
hdu1044的更多相关文章
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- javascript 日期对象(date)详解
Date 对象 Date 对象用于处理日期和时间. 创建 Date 对象的语法: var myDate=new Date(); 注释:Date 对象会自动把当前日期和时间保存为其初始值. 1.date ...
- ASP.NET MVC IOC 之AutoFac
ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...
- JAVA中ClassPath妙用
初学java的人肯定都配置过java三大环境变量 . JAVA_HOME:JDK目录 PATH:jdkbin目录 jre目录 CLASSPATH:一般指向类库lib,也可自定义使用 以下例子是个小例 ...
- 基于A2DFramework的事件机制实现
随笔- 102 文章- 3 评论- 476 发布订阅 - 基于A2DFramework的事件机制实现 SUMMARY 能做什么 DEMO 原理图 应用场景 能做什么 A2DFramework ...
- python 调用shell命令的方法
在python程序中调用shell命令,是件很酷且常用的事情…… 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出 ...
- c# in deep 之委托
通俗来讲,委托就是吩咐别人去做某件事,但不知道他具体会怎么做.使用委托必须注意的一个问题是内存泄露问题:假如委托实例本身不能被回收,委托实例会阻止他的目标被作为垃圾回收.尤其是假如某“短命”的对象调用 ...
- 在win下,如何用bat看程序运行的时间
上网搜了下用bat记录程序运行时间的方法,结果连google跳出的都是些什么ctime啥的- - 一点都不靠谱 傍晚问了几个大神,也大多都是ctime党,不过还好明哲造![跪跪跪] 在此mark 就比 ...
- IIS配置PHP环境
IIS配置PHP环境(快速最新版)(转载+自创) (参考转载的) 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少. ...
- MySql数据库连接操作
主要封装为MySqlHelper类 namespace CiWong.LearningLevelApi.MySqlHelp { /// <summary> /// MySqlHelper ...
- mvc的验证
mvc的验证锦上添点花(2) 上一篇文章我们演示了通过对jquery.validate.unobtrusive.js做点小修改,如何给MVC的验证添点花 主要还是修改了onError与onSucces ...