UVA 707 – Robbery(内存搜索)

UVA 707 – Robbery(内存搜索)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117883.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu clion激活码2021【2021.7最新】

    (Ubuntu clion激活码2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlb…

    2022年3月21日
    311
  • java dom4j 查找_Java使用dom4j查询xml元素

    java dom4j 查找_Java使用dom4j查询xml元素1.Java使用dom4j查询xml元素:1.1book.xml文件如下:a1疯狂Java讲义(附光盘)李刚编著74.20java.jpg总结了几百个Java学员学习过程中的典型错误.]]>a2轻量级JavaEE企业应用实战李刚编著59.20ee.jpg本书主要介绍以Spring+Hibernate为基础的JavaEE应用.2.使用dom4j查询xml元素:创建一个TestPath类…

    2022年7月14日
    13
  • css当鼠标移至时变小手_css3鼠标放在图片上图片上移

    css当鼠标移至时变小手_css3鼠标放在图片上图片上移pointer,hand:手形光标。text:I形光标。wait:等待光标。vertical-text:水平I形光标。no-drop:不可拖动光标。help:帮助光标。auto:标准光标。not-allowed:无效光标。

    2025年7月30日
    0
  • 基于云计算的大数据平台基础设施建设实践

    基于云计算的大数据平台基础设施建设实践大数据平台基础建设当前的趋势是云化与开放,这个平台需要可以提供各类大数据相关PaaS服务,也需要使各类服务间可以简单灵活的组合来满足多变及定制的需求。如何在云上提供弹性、敏捷,却不失稳定和高性能的大数据平台?如何高效的利用云计算的特点来开发大数据平台?本期青云QingCloud系统工程师周小四给大家带来基于云计算的大数据平台基础设施建设以及其架构特点的主题分享。以下是分享原文。——————大…

    2022年5月16日
    42
  • HDU 1693 Eat the Trees 插头DP

    HDU 1693 Eat the Trees 插头DP

    2022年1月6日
    38
  • CTF流量分析常见题型(二)-USB流量

    CTF流量分析常见题型(二)-USB流量0x00前言在学习Wireshark常见使用时,对常见CTF流量分析题型和铁人三项流量分析题的部分问题进行了简单总结。由于篇幅过长,于是另起一篇总结常见流量包分析。包括USB流量包分析和一些其他流量包分析。0x01USB流量包分析USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。在CTF中,USB流量分析主要以键盘和鼠标流量为主。1、键盘流量USB协议数据部分在LeftoverCapt

    2022年6月11日
    136

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号