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 ...
随机推荐
- Matlab变量、分支语句和循环语句
一.Matlab的变量 1.变量的命名 Matlab的变量名由数字.字母和下划线组成,可是仅仅能由字母开头.大写和小写敏感,最大长度为63个字符.不能使用Matlab的关键字作为变量名,应当避免使用函 ...
- Yii1.1应用升级到Yii2.0的一些注意点
1. 应用程序实例直接使用全局命名变量来訪问:$app,而无须调用app() 2. Yii2在视图层的一个显著改变是引入了视图类,这样在MVC模式实现上更为完整. 对应的,相关展现层附属类就由新的视图 ...
- 在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)
转自:http://blog.csdn.net/season_hangzhou/article/details/36423223 一.安装硬盘到物理机上. 二.查看硬盘是否正确安装. 使用“fdisk ...
- C#:向SqlServer数据库中插入imange类型
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...
- VS2008 格式化时候乱码 或者 为全为0
前几天一直发现写入文件的数据全是0 ,找了非常长时间发现问题在以下的地方: P:a是一个float数,如31.000000,然后运行以下的格式化语句时,结果str的值全是0. (我知道讲float格式 ...
- Android自己定义截屏功能,相似QQ截屏
由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...
- CentOS 5.4 安装和卸载桌面
显示系统已经安装的组件,和可以安装的组件:#yum grouplist 如果系统安装之初采用最小化安装,没有安装xwindow,那么先安装:#yum groupinstall "X Wind ...
- Redis(七):Jedis简介和集群
Jedis简介 1.Jedis 是Redis 客户端工具jar2.使用非集群版示例代码 Jedis jedis = new Jedis("192.168.139.132", 637 ...
- java线程同步方法,方法块差别
先说同步方法.它究竟是锁定的当前对象,还是当前类 代码块1 package com.ssss; public class Thread1 implements Runnable { //public ...
- Python字符与ASCII码转换
有两个内置函数,记得以前在<Python Cookbook>里看到过. >>>print ord('a') 97 >>>print chr(97) a