UVA 707 - Robbery

题目链接

题意:在一个w * h的图上。t个时刻,然后知道一些信息,每一个时刻没有小偷的矩阵位置,问哪些时刻能够唯一确定小偷位置。和确定小偷是否已经逃走,假设没逃走。可是也没有时刻能够能够确定小偷位置,就是不知到

思路:记忆化搜索。dp[x][y][ti]表示在x。y位置。ti时刻时候,小偷是否可能出如今这个位置,1表示有可能。0表示没可能,因为小偷一次最多仅仅能上下左右走一步或者不走。所以去dfs一遍就可以

最后推断的时候,假设有一个时刻没有一个1,就表示已经逃走。假设全部时刻的1都超过1个,那么就是不知道。其它就能够确定答案

代码:

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std; const int N = 105;
const int d[5][2] = {{0, 0}, {0, 1}, {0, -1}, {1, 0}, {-1, 0}};
typedef pair<int, int> pii; int w, h, t, n;
int dp[N][N][N];
vector<pii> ans[N]; void init() {
scanf("%d", &n);
int ti, xa, ya, xb, yb;
memset(dp, -1, sizeof(dp));
while (n--) {
scanf("%d%d%d%d%d", &ti, &xa, &ya, &xb, &yb);
for (int i = xa; i <= xb; i++)
for (int j = ya; j <= yb; j++)
dp[i][j][ti] = 0;
}
} int dfs(int x, int y, int ti) {
int &ans = dp[x][y][ti];
if (ans != -1) return ans;
ans = 0;
if (ti == t) return ans = 1;
for (int i = 0; i < 5; i++) {
int xx = x + d[i][0];
int yy = y + d[i][1];
if (xx < 1 || xx > w || yy < 1 || yy > h) continue;
if (dfs(xx, yy, ti + 1))
ans = 1;
}
return ans;
} int solve() {
int flag;
for (int i = 1; i <= t; i++) {
ans[i].clear();
flag = 0;
for (int j = 1; j <= w; j++)
for (int k = 1; k <= h; k++) {
if (dp[j][k][i] == 1) {
ans[i].push_back(make_pair(j, k));
flag = 1;
}
}
if (flag == 0) return 0;
}
flag = 1;
for (int i = 1; i <= t; i++) {
if (ans[i].size() == 1) {
printf("Time step %d: The robber has been at %d,%d.\n", i, ans[i][0].first, ans[i][0].second);
flag = 0;
}
}
if (flag) return 1;
return 2;
} int main() {
int cas = 0;
while (~scanf("%d%d%d", &w, &h, &t) && w) {
init();
for (int i = 1; i <= w; i++)
for (int j = 1; j <= h; j++)
dfs(i, j, 1);
printf("Robbery #%d:\n", ++cas);
int tmp = solve();
if (tmp == 0) printf("The robber has escaped.\n");
else if (tmp == 1) printf("Nothing known.\n");
printf("\n");
}
return 0;
}

UVA 707 - Robbery(内存搜索)的更多相关文章

  1. uva 707(记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261 思路:此题需要记忆化搜索,dp[x][y][t]表示当前状 ...

  2. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  3. uva 11624 Fire!(搜索)

    开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说.电视剧有意思多了 bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的 发现vis[][]是多余的,完全可以用 ...

  4. Codeforces 39E What Has Dirichlet Got to Do with That? 游戏+内存搜索

    主题链接:点击打开链接 意甲冠军: 特定 a一箱 b球 不变n (球和箱子都不尽相同,样的物品) 设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束 有2个人玩游戏. ...

  5. hdu1978--How many ways(内存搜索)

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. HDU 4778 内存搜索&amp;如压力

    鉴于G宝石,B包.和S.S当代表凑齐每种颜色的宝石S我们可以成为哲学家的石头 每个软件包包含N宝石.分别c1,c2....... 然后他们轮流拿包.每个包可以得到一次.宝石出包放在地上. 假设你可以成 ...

  7. SDUT oj 3005 打怪升级(内存搜索)

    当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要 ...

  8. [ACM] poj 1088 滑雪 (内存搜索DFS)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 73409   Accepted: 27141 Description ...

  9. 模拟赛20181016 Uva 1040 状压+搜索 2005 ACM world final problem c

    题目的隐含条件将这道题指向了最小生成树: 利用类似prim的方法,枚举所有子图并判断是否包含询问点,如果包含那么可以更新答案: 边统计边更新,且由于更新一定是向更多的点状态下更新,所以一定可以统计到答 ...

随机推荐

  1. jQuery事件大全

    jQuery事件大全 attribute:  $(" p" ).addclass(css中定义的样式类型) 给某个元素添加样式 $(" img" ).attr( ...

  2. JVM学习笔记(一)------的基本结构

    从Java视台的逻辑结构.我们能够从图中学习JVM: 您可以从图表清楚地看到Java该平台包括各种逻辑模块.还可以学习JDK与JRE差异 于JVM它们的物理结构,我们可以看一下从图计划: 为JVM学习 ...

  3. 无法安装vmware tools的解决方PLEASE WAIT! VMware Tools is currently being installed on your system. Dependin

    VMware安装unbuntu 12.04 LTS时,当你使用VMware的Easy Mode安装时,提示须要安装VMware Tools,屏幕会出现下方的文字: installed unbuntu ...

  4. 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量

    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量 InnoDB 使用bac ...

  5. c中使用malloc动态申请二维数组

    前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...

  6. CSS——inline-block属性

    Inline-block 是元素 display属性的一个值 .这个名字的由来是因为,可以简单的解释为inline+block :display设置这个值的元素,兼具行内元素( inline elem ...

  7. 用wireshark解析应用层存储包

    工作中常常须要统计server上的rtp包接收.发送性能.不想自己再做一套统计软件,打算用现有的wireshark来做分析统计. 先把rtp头存成pcap格式文件,pcap文件格式及如何存储能够參照这 ...

  8. linux串口编程总结

    串口本身.标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口以前被广泛用于连接计算机和终端设备和各种外部设备.尽管以太网接口和USB接口也是以一个串行流进行数据传送的.可是串口连接 ...

  9. Android 进行单元測试难在哪-part3

    原文链接 : HOW TO MAKE OUR ANDROID APPS UNIT TESTABLE (PT. 1) 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.de ...

  10. WM_PARENTNOTIFY的作用(不完全)

    VCL里源码如下: procedure TWinControl.WMParentNotify(var Message: TWMParentNotify); begin with Message do ...