hdu 1044 Collect More Jewels
题意:
一个n*m的迷宫,在t时刻后就会坍塌,问:在逃出来的前提下,能带出来多少价值的宝藏。
其中:
’*‘:代表墙壁;
'.':代表道路;
'@':代表起始位置;
'<':代表出口;
'A'~'J':代表宝藏;
解题思路:
本题有两种思路:1,bfs+状态压缩;相比之下耗时多;
2,bfs+dfs;耗时较少;
在这里着重介绍第一种方法:(博主也是现学现卖啦^_^)
因为宝藏的数目比较少,所以我们可以对宝藏进行状态压缩(用二进制表示宝藏是否已经拾取,1表示已拾取,0表示未拾取),
标记数组vis[i][x][y],i就是宝藏的拾取状态,(x,y)是当前搜索位置;(当然知道这些也不一定能ac)。
注意:(想要把题目ac的看过来)
1:不可能输出“Impossible”。
2:题目中的数据问题,题目的例子相当于有一个围墙,而可能数据并不总是如此。
3:首先是如何判断当前的路径是否应该结束(并不是到‘<’为止,因为可能还有时间到达其他的宝藏)。
下面就祝大家ac愉快啦
代码:
#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 55 struct node
{
int x, y, z, t, val;
}; int n, m, t, num;
int vis[<<][N][N], va[], dir[][] = {,, -,, ,, ,-};
char map[N][N]; int bfs (int sx, int sy)
{
int num = -; queue<node>Q;
node cur, next; cur.x = sx, cur.y = sy;
cur.val = cur.t = cur.z = ;
memset (vis, , sizeof(vis));
vis[][sx][sy] = ; Q.push(cur);
while (!Q.empty())
{
cur = Q.front();
Q.pop(); if (map[cur.x][cur.y] == '<')
{
if (cur.val > num)
num = cur.val;
}
if (cur.t > t)
return num;
for (int i=; i<; i++)
{
next.x = cur.x + dir[i][];
next.y = cur.y + dir[i][];
next.z = cur.z;
next.val = cur.val; if (next.x<m && next.x>= && next.y<n && next.y>=)
{
next.t = cur.t + ;
if (map[next.x][next.y] >= 'A' && map[next.x][next.y] <= 'Z')
{
int l = map[next.x][next.y] - 'A';
if ( !((<<l) & next.z) )
{
next.val += va[l];
next.z = (<<l) | next.z;
}
}
if (!vis[next.z][next.x][next.y] && map[next.x][next.y] != '*')
Q.push(next), vis[next.z][next.x][next.y] = ;
}
}
}
return num;
}
int main ()
{
int c, i, j, s, l = , sx, sy; scanf ("%d", &c); while (c --)
{
scanf ("%d %d %d %d", &n, &m, &t, &s); for (i=; i<s; i++)
scanf ("%d", &va[i]); for (i=; i<m; i++)
{
scanf ("%s", map[i]);
for (j=; j<n; j++)
if (map[i][j] == '@')
sx = i, sy = j;
} num = bfs (sx, sy);
if (l)
printf ("\n");
if (num != -)
printf ("Case %d:\nThe best score is %d.\n", ++l, num);
else
printf ("Case %d:\nImpossible\n", ++l, num);
} return ;
}
hdu 1044 Collect More Jewels的更多相关文章
- HDU 1044 Collect More Jewels(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu.1044.Collect More Jewels(bfs + 状态压缩)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1044 Collect More Jewels(bfs+状态压缩)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1044(bfs+状压)
非常经典的一类题型 没有多个出口.这里题目没有说清楚 Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- HDU 1044 BFS
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1044(bfs+dfs+剪枝)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDU Collect More Jewels 1044
BFS + 状态压缩 险过 这个并不是最好的算法 但是写起来比较简单 , 可以AC,但是耗时比较多 下面是代码 就不多说了 #include <cstdio> #include <c ...
- hdu Collect More Jewels
思路: 先用bfs求出入口,宝物,出口,两两之间的最短距离. 在用dfs搜索所有情况,求出从入口走到出口能获得的最大价值. 我们要解决几个问题:1.求入口到第一个取宝物的地方的最短距离 2.求第i个取 ...
随机推荐
- Access to Image at 'file:///Users canvas本地图片跨域报错解决方案
1.设置跨域 添加跨域条件 crossorigin="anonymous" 前提是后端支持这个图片跨域 2.上面加了之后还是报错 如标题所示 你需要把你的项目放到服务器上面跑 ...
- 关于MySQL的boolean和tinyint(1)
原文:http://blog.csdn.net/woshixuye/article/details/7089508 MySQL保存boolean值时用1代表TRUE,0代表FALSE.boolean在 ...
- Meteor ToDo App实例
在本章中,我们将创建一个简单的待办事项应用程序. 第1步 - 创建应用程序 打开命令提示符,运行以下命令 - C:\Users\Administrator\Desktop>meteor crea ...
- kvm虚拟化学习笔记(三)之windows kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- 【转】c++内存管理学习纲要
http://blog.csdn.net/zhanghefu/article/details/5003407 转自:http://blog.csdn.net/wdzxl198/article/deta ...
- 【APUE】进程间通信之消息队列
三种IPC的共同特征 1.标识符和键 每个内核中的IPC结构都用一个非负整数的标识符加以引用.当一个IPC结构被创建,以后又被删除时,与这种结构相关的标识符连续加1,直至达到一个整型数的最大值,然后又 ...
- Android调试工具_ Stetho
Stetho是Facebook开源的一个Android平台调试工具. Stetho能实如今不root手机的情况下,通过Chrome查看App的布局,Sqlite,SharedPreference.Ne ...
- composer-安装laravel
laravel文档地址: https://docs.golaravel.com/docs/5.6/installation/ 我们怎么将Apache和PHP互联起来呢? http://www.cnbl ...
- [转] logback logback.xml常用配置详解(一)<configuration> and <logger>
转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...