题目
题目描述
奶牛们在被划分成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. Python 【爬虫】

    爬虫的工作原理 首先,爬虫可以模拟浏览器去向服务器发出请求: 其次,等服务器响应后,爬虫程序还可以代替浏览器帮我们解析数据: 接着,爬虫可以根据我们设定的规则批量提取相关数据,而不需要我们去手动提取: ...

  2. Once in a casino CodeForces - 1120B (暴力)

    大意: 给定两个字符串$a,b$, 每个字符为$0-9$, 每次操作将$a$中相邻两位加$1$或减$1$, 操作后每个数仍要为$0-9$, 求最少操作使$a$变成$b$. 先不考虑范围, 判断是否成立 ...

  3. SpringCloud Eureka 配置

    修改 Eureka server 注册中心上面显示的服务名称 参数配置 默认值     说明 服务注册中心配置   Bean类:org.springframework.cloud.netflix.eu ...

  4. 使用jdk8 stream简化集合操作

    使用stream的前提是对lambda表达式和函数式接口有一定的了解,同时对方法引用和普通传参的区别有一定的认识. stream的三大特性:1.不存储数据2.不改变源数据3.延时执行. stream优 ...

  5. C# Winform 设置窗口打开的特效

    https://www.cnblogs.com/mq0036/p/6421946.html using System.Runtime.InteropServices; public class Win ...

  6. 动态规划-最大算式 蓝桥杯ALGO-116

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  7. Python练习_初识函数_day9

    1. 1.作业 1,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. 2,写函数,判断用户传入的对象(字符串.列表.元组)长度是否大于5. 3,写函数,检查 ...

  8. StringBuilder 去除最后一个多余的字符的方法

    public class StringBuilterTest { public static void main(String[] args) { //新增一个map Map<String, S ...

  9. 一个SAP开发人员的养蚕流水帐

    Jerry打算以此文来给汪子熙全家进行了一个多月的养蚕经历画上一个圆满的句号. 南方长大的80后,对蚕应该不会太陌生.大家还记得你们小时候学过的课文<蚕姑娘>么?课文开头是这样的: 春天天 ...

  10. 前阿里P8架构师谈如何设计优秀的API

    随着大数据.公共平台等互联网技术的日益成熟,API接口的重要性日益凸显,从公司的角度来看,API可以算作是公司一笔巨大的资产,公共API可以捕获用户.为公司做出许多贡献.对于个人来说,只要你编程,你就 ...