uva 707(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261
思路:此题需要记忆化搜索,dp[x][y][t]表示当前状态下是否是否有可能点(x,y)上有贼,0表示不可能,1表示可能,然后及时记忆化搜索。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 111
typedef pair<int,int>PP; int n,m,Time,cnt;
int dp[MAXN][MAXN][MAXN];
int dir[][]={{,-},{-,},{,},{,},{,}};
vector<vector<PP> >ans; bool Judge(int x,int y)
{
if(x>=&&x<=m&&y>=&&y<=n)return true;
return false;
} bool dfs(int x,int y,int t)
{
if(dp[x][y][t]!=-)return dp[x][y][t];
if(t>=Time){
cnt++;
ans[t].push_back(make_pair(x,y));
return dp[x][y][t]=;
}
dp[x][y][t]=;
for(int i=;i<;i++){
int xx=x+dir[i][],yy=y+dir[i][];
if(!Judge(xx,yy))continue;
if(dfs(xx,yy,t+)){
dp[x][y][t]=;
}
}
if(dp[x][y][t]==){
ans[t].push_back(make_pair(x,y));
}
return dp[x][y][t];
} int main()
{
int T,t,a,b,c,d,Cas=,flag;
while(~scanf("%d%d%d",&n,&m,&Time)){
if(n==&&m==&&Time==)break;
scanf("%d",&T);
memset(dp,-,sizeof(dp));
while(T--){
scanf("%d%d%d%d%d",&t,&a,&b,&c,&d);
for(int i=b;i<=d;i++)
for(int j=a;j<=c;j++)
dp[i][j][t]=;
}
ans.clear();
ans.resize(MAXN);
cnt=flag=;
for(int i=;i<=m;i++){
for(int j=;j<=n;j++){
if(dp[i][j][]==-)dfs(i,j,);
}
}
printf("Robbery #%d:\n",Cas++);
if(cnt==){
puts("The robber has escaped.");
}else {
for(int i=;i<=Time;i++){
if((int)ans[i].size()==){
flag=;
printf("Time step %d: The robber has been at %d,%d.\n",i,ans[i][].second,ans[i][].first);
}
}
if(!flag)puts("Nothing known.");
}
puts("");
}
return ;
}
uva 707(记忆化搜索)的更多相关文章
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...
- UVa 10400 记忆化搜索
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...
- Substring Uva 11468_记忆化搜索 + AC自动机
Code: #include<cstdio> #include<cstring> #include<queue> using namespace std; cons ...
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...
- UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每一个糖果都有颜色.每次你都仅仅能拿随意一堆最上面的糖果,放到自己的篮子里.假设有两个糖果颜色同样的话,就行 ...
- UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)
Problem UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...
- UVa 10285 Longest Run on a Snowboard - 记忆化搜索
记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...
- 状压DP+记忆化搜索 UVA 1252 Twenty Questions
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
随机推荐
- shell统计日志
#nginx日志统计独立ip的个数: awk '{print $1}' /path-to-log-dir/access.log | sort | uniq | wc -l #查询访问最多的前10个ip ...
- iOS开发-多线程编程技术(Thread、Cocoa operations、GCD)
简介 在软件开发中,多线程编程技术被广泛应用,相信多线程任务对我们来说已经不再陌生了.有了多线程技术,我们可以同做多个事情,而不是一个一个任务地进行.比如:前端和后台作交互.大任务(需要耗费一定的时间 ...
- 【转帖】Service Discovery: 6 questions to 4 experts
https://highops.com/insights/service-discovery-6-questions-to-4-experts/ What’s Service Discovery? I ...
- pycharm 控制台字体背景颜色设定让你美到爆
还在为你控制台字体颜色不入眼而发愁吗? 在某些特殊时刻想要改变下字体的颜色却无从下手而发愁吗? 那你就进来看一看,瞧一瞧,之需看2分钟,花2分钟理解,花3分钟练练手就能让你的控制能字体炫酷起来! 一. ...
- 构造矩阵解决这个问题 【nyoj299 Matrix Power Series】
矩阵的又一个新使用方法,构造矩阵进行高速幂. 比方拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + - + Ak. 让你求s. ...
- Lintcode---二叉树的最大节点
在二叉树中寻找值最大的节点并返回. 您在真实的面试中是否遇到过这个题? Yes 样例 给出如下一棵二叉树: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值为 3 的节点. 思路: 题 ...
- OpenCV2马拉松第24圈——轮廓提取
计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27979267 收入囊中 在图片中找到轮廓而且描绘 ...
- C#多枚举值的写法与读法
首先,定义枚举的时候必须是2,4,8,16这种2的次方的值. using System; using System.Collections.Generic; using System.Linq; us ...
- atitit.判断时间重叠方法总结 java c++ c#.net js php
atitit.判断时间重叠方法总结 java c++ c#.net js php 1. 判断时间重叠具体流程思路 1 2. 重叠算法 实际上就是日期集合跟个时间集合的的交集(乘法算法) 1 3. 代 ...
- spring 学习资料备份
易百教程 https://www.yiibai.com/spring/spring-autowiring-by-name.html