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. K2工作流的使用

    K2的工作流作为工作流中的战斗机,被各大企业争相抢购着,当然我们公司也买了,用起来确实方便也的确很强大. 主要分两的模块: 一.K2.net 2003 Service Manager 以上是对配置用户 ...

  2. Axis2 webservice入门--开发环境搭建,概念理解

    关于webservice的概念,网上有各种解释,但是不太好懂. 可以这样理解:1.一个webservice就是一个“功能”,只是这个功能是别人写好的,被放在别人的网站上.                ...

  3. solr 4.3.0 配置

    scheme.xml <?xml version="1.0" encoding="UTF-8" ?> <schema name="t ...

  4. QQ注册

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. table表格

    表格是一种组织整理的数据的手段,在div布局还未流行是,也用来布局,一个表格包含了表格整体.表格头部.每个表格均有若干行,每行被分为若干单元格. 在HTML中表格使用table标签来定义,行由< ...

  6. java 面向对象编程--第十四章 多线程编程

    1.  多任务处理有两种类型:基于进程和基于线程. 2.  进程是指一种“自包容”的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存. 3.  线程是进程内部单一的 ...

  7. eclipse debug 过滤一些包

    eclipse debug java程序的时候, 我们按F5的时候,常常会进入java自带类库里,这些类库并不是我们需要debug的代码,这样会影响debug的效率,我们可以在eclipse里设置,过 ...

  8. 第一次编辑JAVA

    其实就是根据例题来进行编辑,但并不是一次就对了的,有大小写输入出错的问题,有漏掉标点符号的问题,值得注意的是,所有的标点符号都需要是在英文输入法状态下输入的,最后的问题——例题所用的C盘给我们带来了系 ...

  9. POJ 2255 Tree Recovery 树的遍历,分治 难度:0

    http://poj.org/problem?id=2255 #include<cstdio> #include <cstring> using namespace std; ...

  10. (BFS)hdoj1242-Rescue

    题目地址 初学BFS,第一次用BFS做题.题目就是一个基本的BFS模型,需要稍加注意的是遇到警卫时间要+1,以及最后比的是最短的时间而不是步数. #include<cstdio> #inc ...