题目
题目描述
奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走, 试图找到整块草地中最美味的牧草。Farmer John在某个时刻看见贝茜在位置 (R1, C1),恰好T (0 < T <= 15)秒后,FJ又在位置(R2, C2)与贝茜撞了正着。 FJ并不知道在这T秒内贝茜是否曾经到过(R2, C2),他能确定的只是,现在贝茜 在那里。 设S为奶牛在T秒内从(R1, C1)走到(R2, C2)所能选择的路径总数,FJ希望有 一个程序来帮他计算这个值。每一秒内,奶牛会水平或垂直地移动1单位距离( 奶牛总是在移动,不会在某秒内停在它上一秒所在的点)。草地上的某些地方有 树,自然,奶牛不能走到树所在的位置,也不会走出草地。 现在你拿到了一张整块草地的地形图,其中’.‘表示平坦的草地,’*'表示 挡路的树。你的任务是计算出,一头在T秒内从(R1, C1)移动到(R2, C2)的奶牛 可能经过的路径有哪些。

输入输出格式
输入格式:
第1 行: 3 个用空格隔开的整数:N,M,T 。 第2…N+1 行: 第i+1 行为M 个连续的字符,描述了草地第i 行各点的情况,保证字符是’.‘和’*'中的一个。 第N+2 行: 4 个用空格隔开的整数:R1,C1,R2,C2 。

输出格式:
第1 行: 输出S,含义如题中所述。

输入输出样例
输入样例#1:
4 5 6
….
….


1 3 1 5
输出样例#1:
1
说明
样例说明:

草地被划分成4 行5 列,奶牛在6 秒内从第1 行第3 列走到了第1 行第5 列。

奶牛在6 秒内从(1,3)走到(1,5)的方法只有一种(绕过她面前的树)

思路
这道题爆搜过不了!!!
我是用的BFS来做,那些想用DP/DFS的可以去看其他博客或者继续看这篇awa(和没说一样)
这道题目用BFS来做的话,因为是求方案数,所以对于每一个走过的点,我们不能常规化的打上标记,以后不走,而是应该考虑记忆化搜索,用f[i][j][k]表示第k秒到达点(i,j)的方案数,不难发现,如果f[i][j][k]不为0,那么它四周的点是不可能在第k秒到达的,所以我们只需要知道它四周的点的f[i][j][k-1],一步步递推(?)下去就可以了。

 #include<bits/stdc++.h>
using namespace std;
int n,m,t,cnt;
char a[][];
struct node
{
int x,y,t;
node(){};
node(int xx,int yy,int tt)
{
x=xx,y=yy,t=tt;
}
}st,ed;
int dir[][]={{,},{-,},{,},{,-}},f[][][];
void bfs(node s)
{
queue<node> q;
q.push(s);
while(!q.empty())
{
node now=q.front();
q.pop();
if(now.t>ed.t)
return;
for(int i=;i<;i++)
{
int tx=now.x+dir[i][],ty=now.y+dir[i][];
if(a[tx][ty]=='.')
{
node v=node(tx,ty,now.t+);
if(abs(v.x-ed.x)+abs(v.y-ed.y)>t-v.t)continue;
f[tx][ty][now.t+]+=f[now.x][now.y][now.t];
if(f[tx][ty][now.t+]-f[now.x][now.y][now.t]>)continue;
q.push(v);
}
}
}
return;
}
int main()
{
cin>>n>>m>>t;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
}
}
int a,b,c,d;
cin>>a>>b>>c>>d;
f[a][b][]=;
st=node(a,b,);
ed=node(c,d,t);
bfs(st);
cout<<f[c][d][t]<<endl;
return ;
}

【题解】游荡的奶牛-C++的更多相关文章

  1. Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1006  Solved: ...

  2. BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 762  Solved:  ...

  3. COGS130. [USACO Mar08] 游荡的奶牛[DP]

    130. [USACO Mar08] 游荡的奶牛 ★☆   输入文件:ctravel.in   输出文件:ctravel.out   简单对比时间限制:1 s   内存限制:128 MB 奶牛们在被划 ...

  4. BZOJ_1616_[Usaco2008_Mar]_Cow_Travelling_游荡的奶牛_(DP)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1616 给出一张图,有些点不能走,给出起始点和结束点,以及时间,求在该时间到达结束点的方案数. ...

  5. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛( dp )

    一道水 dp ...然后我一开始用 BFS ...结果 MLE 了... dp[ i ][ j ][ k ] 由它四个方向上的 k - 1 转移. -------------------------- ...

  6. P1535 游荡的奶牛

    P1535 游荡的奶牛 题目描述 Searching for the very best grass, the cows are travelling about the pasture which ...

  7. 洛谷 P1535 游荡的奶牛

    P1535 游荡的奶牛 题目描述 Searching for the very best grass, the cows are travelling about the pasture which ...

  8. [Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]

    Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John ...

  9. 【bzoj1616】[Usaco2008 Mar]Cow Travelling游荡的奶牛 bfs

    题目描述 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John在某个时刻看见 ...

随机推荐

  1. C++中静态成员函数和普通成员函数存储方式相同

    先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别. #include "stdafx.h" #include<iostream> #include& ...

  2. 矩阵拿宝物--Codeforces 1201D - Treasure Hunting Codeforces Round #577 (Div. 2)

    网上题解比较少,自己比较弱研究了半天(已经过了),希望对找题解的人有帮助 题目链接:https://codeforc.es/contest/1201/problem/D 题意: 给你一个矩形,起始点在 ...

  3. windows安装memcache并为php添加memcache扩展

    第一步:安装包下载 1.4.5 版本之前用作为一个服务安装,1.4.5 版本之后用任务计划中启用一个普通进程来使用 具体内容如以下链接:http://www.runoob.com/memcached/ ...

  4. phpstrom

    在phpstrom 中启用composer 步骤: 1.打开编辑器,选择 文件(file)->设置(setting),找到 Command Line Tool Support ,点击 + 号进行 ...

  5. Python基础 第5章 条件、循环及其他语句(2)

    6. 简单推导 列表推导,是一种从其他列表创建列表的方式,其原理类似于for循环. list1 = [x * x for x in range(10)] print(list1) 结果: [0, 1, ...

  6. IntelliJ IDEA调出problem窗口

    一.File =>Settings 二.搜索Compiler=>勾选Make project automatically 三.出现问题Problems窗口会报错 原文地址:https:// ...

  7. Flash播放控件属性详解

    Flash 播放控件属性详解 一.属性篇 1.AlignMode(读写)  语法:AlignMode As Long  说明:对齐方式(与SAlign 属性联动).当控件的长宽比例与影片不一致且WMo ...

  8. C#强制回收垃圾

    [DllImport("psapi.dll")] private static extern int EmptyWorkingSet(int hProcess); public v ...

  9. JVM学习笔记——字节码指令

    JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...

  10. 1 使用webpack搭建vue开发环境

    1 先去node.js官网下载nodejs并且安装 安装成功之后在命令行输入node -v 回车,npm -v回车如果显示对应的版本号,说明node安装成功,自带的npm也安装成功 2 在d盘下创建一 ...