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 ...
随机推荐
- lucene 学习一
索引工具的三部分 1.索引部分 2.分词部分 3.搜索部分 查看索引的工具:luke java -jar fileName.jar 目标:为文件夹的所有的文档生成索引并搜索它 package co ...
- Dao泛型设计和反射反型
(1)DAO泛型设计:当二哥或多个类中有类似的方法时,可以将这些累死的方法提出到类中,形式一个泛型父类 (2)反射反型:在泛型父类中获取子类的具体类型的过程,叫反射反型 package cn.itca ...
- 最大似然估计(MLE)与最大后验概率(MAP)
何为:最大似然估计(MLE): 最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”.可以通过采样,获取部分数据,然后通过最大似然估计来获取已知模型的参数. 最大似然估计 ...
- tomcat设置jvm参数
http://www.quiee.com.cn/archives/592/ Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.b ...
- Python 实现小数和百分数的相互转换
# -*- coding: utf-8 -*- #百分比转换位小数 # -*- coding: utf-8 -*- s = '20%' # 默认要转换的百分比是字符串aa = float(s.stri ...
- 基于注解配置spring
1 对 bean 的标注基于注解方式有3个注解 @Component @Repository 对DAO类进行标注 @Service 对Service类进行标注 @Controller 对Contro ...
- JavaScript之Web通讯
web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...
- jQuery事件:bind、delegate、on的区别
最近在AngularJS的开发中,遇到一个神奇的事情:我们用到livebox来预览评论列表中的图片, 然而评论列表是由Angular Resource动态载入的.不可思议的是,点击这些动态载入的图片仍 ...
- JQuery实现选择特定楼层回复
JQuery实现选择特定楼层回复 需求: 一个论坛里面的小功能,除了回复帖子之外,也能够回复帖子以下的回复.详细实现细节: 每个回复有一个"回复"按钮,点击按钮实现: 在form表 ...
- atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js 1. 图片按钮的效果总结 1 1.1. 按钮图片自动缩放的. 1 1.2. 不要 ...