http://acm.hdu.edu.cn/showproblem.php?pid=1044

代码题,没什么好说的,先预处理出两点间距离,然后dfs搜一下找最大值

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int INF=0xfffffff;
int n,m,L,M,ans,sum;
int dis[][];
char mp[][]; struct node{
int x,y,step,v;
}kk[]; int dx[]={,-,,};
int dy[]={,,,-};
int vis[][]; int bfs(node s,node t){
memset(vis,,sizeof(vis));
queue <node> q;
s.step=;
q.push(s);
vis[s.x][s.y]=;
while(!q.empty()){
node u=q.front();
if(u.x==t.x && u.y==t.y)
return u.step;
q.pop();
for(int i=;i<;i++){
int xx=u.x+dx[i];
int yy=u.y+dy[i];
if(xx< || xx>=n || yy< || yy>=m)continue;
if(mp[xx][yy]=='*')continue;
if(!vis[xx][yy]){
vis[xx][yy]=;
node next=u;
next.step++;next.x=xx;next.y=yy;
if(next.step<=L)q.push(next);
}
}
}
return INF;
} int VIS[]; void dfs(int now,int t,int v){
if(ans==sum)return;
if(t>L)return;
if(now==M+){
ans=max(ans,v);
return;
}
for(int i=;i<=M+;i++){
if(VIS[i])continue;
VIS[i]=;
dfs(i,t+dis[now][i],v+kk[i].v);
VIS[i]=;
}
} int V[]; int main(){
int T;
scanf("%d",&T);
int first=;
for(int cas=;cas<=T;cas++){
scanf("%d%d%d%d",&m,&n,&L,&M);
sum=ans=;
for(int i=;i<=M;i++){
scanf("%d",&V[i]);
sum+=V[i];
}
for(int i=;i<n;i++)
scanf("%s",mp[i]);
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(mp[i][j]=='@'){
kk[].x=i;kk[].y=j;kk[].v=;
}
else if(mp[i][j]=='<'){
kk[M+].x=i;kk[M+].y=j;kk[M+].v=;
}
else if(mp[i][j]>='A' && mp[i][j]<='J'){
kk[mp[i][j]-'A'+].x=i;kk[mp[i][j]-'A'+].y=j;kk[mp[i][j]-'A'+].v=V[mp[i][j]-'A'+];
}
}
}
memset(dis,-,sizeof(dis));
for(int i=;i<=M+;i++){
for(int j=;j<=M+;j++){
if(i==j)dis[i][j]=;
else{
if(dis[i][j]==-){
dis[i][j]=bfs(kk[i],kk[j]);
dis[j][i]=dis[i][j];
}
}
}
}
memset(VIS,,sizeof(VIS));
VIS[]=;
dfs(,,);
if(first)first=;
else putchar('\n');
printf("Case %d:\n",cas);
if(dis[][M+]==INF)puts("Impossible");
else printf("The best score is %d.\n",ans);
}
return ;
}

HDU 1044的更多相关文章

  1. HDU 1044 Collect More Jewels(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  2. hdu.1044.Collect More Jewels(bfs + 状态压缩)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  3. hdu 1044(bfs+状压)

    非常经典的一类题型 没有多个出口.这里题目没有说清楚 Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  4. hdu 1044 Collect More Jewels(bfs+状态压缩)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. HDU 1044 BFS

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  6. hdu 1044(bfs+dfs+剪枝)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  7. hdu 1044 Collect More Jewels

    题意: 一个n*m的迷宫,在t时刻后就会坍塌,问:在逃出来的前提下,能带出来多少价值的宝藏. 其中: ’*‘:代表墙壁: '.':代表道路: '@':代表起始位置: '<':代表出口: 'A'~ ...

  8. hdu 1044 BFS(压缩图)+DFS

    题意:              给你起点,终点,图上有墙有路还有宝物,问你在规定时间内能否能到终点,如果能问最多能捡到多少宝物. 思路:           看完这个题目果断 BFS+三维的mark ...

  9. HDU Collect More Jewels 1044

    BFS + 状态压缩 险过 这个并不是最好的算法 但是写起来比较简单 , 可以AC,但是耗时比较多 下面是代码 就不多说了 #include <cstdio> #include <c ...

随机推荐

  1. 51nod 1043 幸运号码(数位dp)

    题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...

  2. XX宝面试题——css部分

    1.<b></b>与<strong></strong>有什么不同? 1) <b>标签是一个实体标签,它所包围的字符将被设为bold(粗体), ...

  3. ABAP_常用函数整理_傻X版

    输出前导0:CONVERSION_EXIT_ALPHA_INPUT 单位转换:CONVERSION_EXIT_CUNIT_INPUT 单位换算:UNIT_CONVERSION_SIMPLE 修改订单组 ...

  4. oracle常见权限分配

    1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个: ALL ON 数据对象名 ...

  5. eclipse-mysql-tomcat bug之旅

    赶紧默念三遍google大法好... [连接数据库 servlet调用提示找不到可加载的driver,普通的.java文件没问题] 表示不服啊...明明可以连上啊...为什么多了几个中间界面就不好使了 ...

  6. Ubuntu 13.10 Broadcom BCM4313问题

    开始找不到无线网卡,后来不知道怎么就出来了,但是速度很慢.用下面的方法解决的(我也不知道哪条命令起的作用,反正现在正常了): sudo apt-get remove --purge bcmwl-ker ...

  7. php和AJAX用户注册演示程序

    <! doctype html public "-//w3c//dtd html 4.0//en" "http://www.w3.org/tr/rec-html14 ...

  8. Js练习题之查找字符串中出现最多的字符和个数

    如sssfgtdfssddfsssfssss,出现最多的字符是s,出现了12次 传统写法 分析: 1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就在json里创建 ...

  9. 【转】Centos系统文件与用户权限分配详解ftp,nginx,php

    linux系统中权限是非常完善的一个功能了,我们如果设置不正确文件就无法使用了,像我们以一般情况需要把文件权限设置为777或644了,对于用户权 限就更加了,像素ftp,nginx,php这些我们都可 ...

  10. PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示解决方法

    问题:PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示! FlexPaper 与 PDF2SWF 结合是解决在线阅读PDF格式文件的问题的,多页的PDF文件转换可以正常显示,只有一页 ...