HDU Collect More Jewels 1044
BFS + 状态压缩 险过 这个并不是最好的算法 但是写起来比较简单 , 可以AC,但是耗时比较多
下面是代码 就不多说了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define Max(a,b) (a>b?a:b)
#define Min(a,b) (a>b?a:b)
#define maxn 100 int m, n, time, k, sorce[];
bool vis[<<][][];
char map[][]; typedef struct
{
int step;
int x, y;
int sorce;
int stau;
}Point; int bfs(Point P); int main()
{
int i, j, T, ans, count = ;
Point P;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&n,&m,&time,&k); for(i=; i<k; i++)
scanf("%d",&sorce[i]); for(i=; i<m; i++)
{
scanf("%s",map[i]); for(j=; j < n; j++)
{
if(map[i][j] == '@')
P.x = i, P.y = j, P.step = P.sorce = P.stau = ;
}
} ans = bfs(P); printf("Case %d:\n",count++);
if(ans == -)
printf("Impossible\n");
else
printf("The best score is %d.\n",ans);
if(T)
printf("\n");
}
return ;
} int bfs(Point P)
{
int i, max = -, key;
int dir[][] = {,,,,-,,,-};
Point Pn;
queue <Point> q;
q.push(P);
memset(vis,,sizeof(vis));
vis[P.stau][P.x][P.y] = ;
while( !q.empty() )
{
P = q.front();
q.pop();
for(i=; i<; i++)
{
Pn.x = P.x + dir[i][];
Pn.y = P.y + dir[i][];
Pn.step = P.step + ;
Pn.sorce = P.sorce;
Pn.stau = P.stau;
if(Pn.step > time)
break;
if(Pn.x>= && Pn.x<m && Pn.y>= && Pn.y<n && map[Pn.x][Pn.y] != '*')
{
if(map[Pn.x][Pn.y] == '<')
{
max = Max(max,Pn.sorce);
if(Pn.stau == ((<<k)-) )
return max;
}
else if(map[Pn.x][Pn.y] >= 'A' && map[Pn.x][Pn.y] <= 'J')
{
key = map[Pn.x][Pn.y] - 'A';
if( ((Pn.stau)&(<<key)) == )
{
Pn.sorce += sorce[key];
Pn.stau += <<key;
}
}
if( !vis[Pn.stau][Pn.x][Pn.y])
{
vis[Pn.stau][Pn.x][Pn.y] = ;
q.push(Pn);
} }
}
}
return max;
}
HDU Collect More Jewels 1044的更多相关文章
- hdu Collect More Jewels
思路: 先用bfs求出入口,宝物,出口,两两之间的最短距离. 在用dfs搜索所有情况,求出从入口走到出口能获得的最大价值. 我们要解决几个问题:1.求入口到第一个取宝物的地方的最短距离 2.求第i个取 ...
- 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 ...
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1044 Collect More Jewels
题意: 一个n*m的迷宫,在t时刻后就会坍塌,问:在逃出来的前提下,能带出来多少价值的宝藏. 其中: ’*‘:代表墙壁: '.':代表道路: '@':代表起始位置: '<':代表出口: 'A'~ ...
- 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 ...
随机推荐
- iOS UIKit:viewController之层次结构(1)
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁.且应用程序至少有一个view controller.每个view controller对象都负责和管理一个 ...
- SQL Server 2008 安装指南
一.安装需求: 1.硬件需求条件 硬件 需求 处理器 最低:1.4 GHz(x64处理器)注意:Windows Server 2008 for Itanium-Based Systems 版本需要In ...
- mysql 安装employees db的步骤
因为准备要开始学习ASP.NET的高级部分,所以今晚想安装一个数据库示例,百度发现原来mysql有个employees db 但是单纯按照网上的方法,也是没有办法导入的,所以写了这篇博文,作为笔记. ...
- Android Studio下添加引用jar文件和so文件
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 安卓开发中我们常会遇到jar文件和so文件的引用,下面介绍下在as下如何添加使用,这里以百度地图s ...
- SQL server抽疯后修改sa密码无法成功的处理办法
今天上班打开电脑,发现尼玛所有项目启动后都报错,原因是说数据库sa的验证错误,无法进行数据库链接等等东西,简单地说---SQL server抽疯了!!!:( 昨天还好好的.而且没有修改过东西.为啥会出 ...
- session marked for kill处理oracle中杀不掉的锁
ora-00031:session marked for kill处理oracle中杀不掉的锁 一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长 ...
- maven常见命令总结
1.maven vm配置 -Xms512m -Xmx1024m -XX:PermSize=256m 2.启动tomcat clean package -Dpackage.environment=de ...
- 解决Xcode7多个模拟器的方法
xcode模拟器都这样显示,没办法判断是哪个系统,解决办法是 1.关闭xcode 2.终端输入 sudo killall -9 com.apple.CoreSimulator.CoreSimulato ...
- 安装brew
brew brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便. 安装brew 打开终端窗口, 粘贴以下脚本: ru ...
- ccui.ScrollView 扩展
大多数游戏都有背包这个东西. 道具列表通常用 ScrollView 来实现. 这个ScrollView内部有一个Layout, 滑动都是由移动这个Layout来实现. 道具摆放通常从上往下, 从左到右 ...