礼物(BFS)
礼物
时间限制: 1 Sec 内存限制: 64 MB
提交: 39 解决: 4
[提交][状态][讨论版]
题目描述
给出一个n行m列的点阵,“.”表示可通行格子,“#”表示不可通行格子,“K”表示国王的初始位置,“Q”表示王后的位置,“G”表示该格子有一个礼
物。注意:国王、王后、礼物所在的格子可以认为是可通行格子。国王从开始位置出发,国王从当前格子可以走到上、下、左、右四个相邻格子,当然前提是可通行
格子。国王从当前格子走到相邻格子的时间是变化的,这取决于国王手头上收集到的礼物的数量,假如当前国王手头上有y个礼物,那么他从当前格子移动到相邻格
子的所用时间是y+l秒。一旦国王进入某个有礼物的格子,他可以选择取该格子的礼物,也可以选择不取该格子的礼物。取礼物这个动作可以认为是瞬间完成的,
不需要时间。国王想收集到尽量多的礼物送给王后,但是他到达王后所在的格子不能超过T秒,王后不想等太长时间。注意:国王在收集礼物的途中可能多次走到相
同的格子。
输入
第1行:三个整数n、m、T。 1≤n,m≤50,1≤T≤109。
接下来是n行m列的点阵,‘G’的数量不超过16。只有一个国王,一个王后。
输出
一个整数,国王在规定时间内,最多可以收集到多少个礼物送给王后?
样例输入
5 7 50
#....G#
###G###
#K...Q#
###.###
#G..GG#
样例输出
4
【分析】威哥写的,表示并不懂,立个flag,日后再学,已经看晕了。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include<functional>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int N = (<<)+;
const int INF = 0x3f3f3f3f;
char s[][];
int n,m,T;
struct Node {
int x,y;
Node(int a=,int b=) {
x=a;
y=b;
}
} st,ed;
vector<Node>g;
int d[][],dis[][],f[N][];
int dx[]= {,,-,};
int dy[]= {-,,,};
void bfs(int pos) {
queue<Node>q;
memset(dis,INF,sizeof(dis));
dis[g[pos].x][g[pos].y]=;
q.push(g[pos]);
while(!q.empty()) {
Node u=q.front();
q.pop();
for(int i=; i<; ++i) {
int x=u.x+dx[i],y=u.y+dy[i];
if(x<||x>n||y<||y>m||s[x][y]=='#')continue;
if(dis[x][y]==INF) {
dis[x][y]=dis[u.x][u.y]+;
q.push(Node(x,y));
}
}
}
for(int i=; i<g.size(); ++i)if(i!=pos) {
d[pos][i]=dis[g[i].x][g[i].y];
}
}
int main() {
scanf("%d%d%d",&n,&m,&T);
for(int i=; i<=n; ++i)scanf("%s",s[i]+);
for(int i=; i<=n; ++i) {
for(int j=; j<=m; ++j) {
if(s[i][j]=='K')st=Node(i,j);
else if(s[i][j]=='Q')ed=Node(i,j);
else if(s[i][j]=='G')g.push_back(Node(i,j));
}
}
g.push_back(st);
g.push_back(ed);
memset(d,INF,sizeof(d));
memset(f,INF,sizeof(f));
for(int i=; i<g.size()-; ++i)bfs(i);
int ss=g.size()-,tt=g.size()-,tot=(<<(g.size()-));
for(int i=; i<g.size()-; ++i) {
f[<<i][i]=d[ss][i];
}
for(int i=; i<tot; ++i) {
for(int j=; j<g.size()-; ++j) {
if(!(i&(<<j))||f[i][j]>=INF)continue;
for(int k=; k<g.size()-; ++k) {
if((i&(<<k))||d[j][k]>=INF)continue;
f[i|(<<k)][k]=min(f[i][j]+(__builtin_popcount(i)+)*d[j][k],f[i|(<<k)][k]);
}
}
}
int ret=;
for(int i=; i<tot; ++i) {
for(int j=; j<g.size()-; ++j) {
if(f[i][j]!=INF||d[j][tt]!=INF) {
int tmp=f[i][j]+(__builtin_popcount(i)+)*d[j][tt];
if(tmp<=T) ret=max(ret,__builtin_popcount(i));
}
}
}
printf("%d\n",ret);
return ;
}
礼物(BFS)的更多相关文章
- BZOJ 3438 小M的礼物
BZOJ 3438 小M的礼物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- jQuery动画-圣诞节礼物
▓▓▓▓▓▓ 大致介绍 下午看到了一个送圣诞礼物的小动画,正好要快到圣诞节了,就动手模仿并改进了一些小问题 原地址:花式轮播----圣诞礼物传送 思路:动画中一共有五个礼物,他们平均分布在屏幕中,设置 ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
随机推荐
- [bzoj4860] [BeiJing2017]树的难题
Description 给你一棵 n 个点的无根树.树上的每条边具有颜色. 一共有 m 种颜色,编号为 1 到 m.第 i 种颜色的权值为 ci.对于一条树上的简单路径,路径上经过的所有边按顺序组成一 ...
- 雅礼集训 Day3 T3 w 解题报告
w 题目背景 \(\frac 14\)遇到了一道水题,双完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607^2\)眼就切掉了这题,嘲讽了\(\frac 14 ...
- ng 构建
1.ng 构建和部署 构建:编译和合并ng build 部署:复制dist里面的文件到服务器 2.多环境的支持 配置环境package.json "scripts": { &quo ...
- Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)
今天做的一个用dom4j解析声音文本的xml文档时,我用ArrayList来存储每一个Item的信息,要注意ArrayList多次添加对象,会导致覆盖之前的对象:解决方案是在最后将对象添加入Array ...
- httpFS访问
编辑文件httpfs-env.sh 执行sbin/httpfs.sh 执行命令curl -i "http://192.168.1.213:14000/webhdfs/v1?user.name ...
- idea讲web项目部署到tomcat,热部署
idea是自动保存文件的,不需要ctrl+s手动保存. idea使用不习惯,修改了jsp文件后,刷新浏览器并没有立刻显示出来,而是要重新编译一下代码,重新部署才会出现. 在idea tomcat 中s ...
- [BZOJ2946] [Poi2000]公共串解题报告|后缀数组
给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 单词个数<=5,每个单词长度<=2000 尽管最近在学的是SAM...但是看到这个题还是忍不住想写SA... (其实是不 ...
- bzoj 1412 最小割 网络流
比较明显的最小割建模, 因为我们需要把狼和羊分开. 那么我们连接source和每个羊,流量为inf,代表这条边不能成为最小割中的点,同理连接每个狼和汇,流量为inf,正确性同上,那么对于每个相邻的羊和 ...
- Local Authentication Using Challenge Response with Yubikey for CentOS 7
Connect Yubikey ,then initialize YubiKey slot 2: ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt ...
- 第三方库SDWebImage的原理
关于SDWebImage,其实是不用懂原理的,只是有一些面试官会问,分享给正在找工作的朋友们: 不多说直接上图: 另外..... 我的愿望是....... 世界和平.........