ACM 130. [USACO Mar08] 游荡的奶牛(dp+BFS)
130. [USACO Mar08] 游荡的奶牛
★☆ 输入文件:ctravel.in
输出文件:ctravel.out
简单对比
时间限制:1 s 内存限制:128 MB
-
奶牛们在被划分成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)的奶牛可能经过的路径有哪些。
程序名: ctravel
输入格式:
- 第1行: 3个用空格隔开的整数:N,M,T
- 第2..N+1行: 第i+1行为M个连续的字符,描述了草地第i行各点的情况,保证字符是'.'和'*'中的一个
- 第N+2行: 4个用空格隔开的整数:R1,C1,R2,以及C2
输入样例 (ctravel.in):
4 5 6 ...*. ...*. ..... ..... 1 3 1 5
输入说明:
草地被划分成4行5列,奶牛在6秒内从第1行第3列走到了第1行第5列。
输出格式:
- 第1行: 输出S,含义如题中所述
输出样例 (ctravel.out):
1
输出说明:
奶牛在6秒内从(1,3)走到(1,5)的方法只有一种(绕过她面前的树)。
递推
T秒可到的位置等于四个方向T-1秒可到的路径数之和
由BFS一个状态(x,y,t)只能出现一次,因为t出现则t-1必定已经全部出现]
#include <iostream> #include <cstdio>using namespace std;#define MAX_T 16 #define MAX_N 102 #define MAX_Q 100000 #define ADD(x) x=(x+1)%MAX_Qstruct Pos {int x,y;int step; } queue[MAX_Q]; int front,rear;int N,M,T; char map[MAX_N][MAX_N]; int dp[MAX_N][MAX_N][MAX_T]; bool used[MAX_N][MAX_N][MAX_T]; int sx,sy,tx,ty; int cnt=0; int dx[]={1,-1,0,0}; int dy[]={0,0,-1,1};int main() {freopen("ctravel.in","r",stdin);freopen("ctravel.out","w",stdout);cin>>N>>M>>T;for(int i=0;i<N;i++) cin>>map[i];cin>>sy>>sx>>ty>>tx;sx--;sy--;tx--;ty--;front=rear=0;queue[rear]=Pos{sx,sy,0};dp[sx][sy][0]=1;ADD(rear);while(front!=rear){Pos p=queue[front];ADD(front);cnt++;for(int i=0;i<4;i++){int nx=p.x+dx[i],ny=p.y+dy[i];if(nx>=0 && nx<M && ny>=0 && ny<N && map[ny][nx]=='.'){if(p.step>=1)dp[p.x][p.y][p.step]+=dp[nx][ny][p.step-1];if(p.step+1<=T && !used[nx][ny][p.step+1]){used[nx][ny][p.step+1]=true;queue[rear]=Pos{nx,ny,p.step+1};ADD(rear);}}}}cout<<dp[tx][ty][T]<<endl;return 0; }
ACM 130. [USACO Mar08] 游荡的奶牛(dp+BFS)相关推荐
- [USACO Mar08] 游荡的奶牛
[USACO Mar08] 游荡的奶牛 时间限制:1 s 内存限制:128 MB 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游 ...
- ACM 131. [USACO Mar08] 奶牛渡河(线性dp)
131. [USACO Mar08] 奶牛渡河 ★☆ 输入文件: cowriver.in 输出文件: cowriver.out 简单对比 时间限制:1 s 内存限制:128 MB F ...
- 【bzoj 1616】: [Usaco2008 Mar]Cow Travelling游荡的奶牛 dp
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1616 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Tim ...
- bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(BFS)
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1293 Solved ...
- BZOJ1616[Usaco2008 Mar]Cow Travelling游荡的奶牛 dp
Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John ...
- F. [usaco 2009 dec]游荡的奶牛 总结
F. [usaco 2009 dec]游荡的奶牛 总结 题目 F. [usaco 2009 dec]游荡的奶牛 时间限制:1s 空间限制:256MB 输入文件:sgraze-in 输出文件:sgraz ...
- BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Description 奶牛们在被划分成N ...
- 【习题详解】动态规划DP:硬币游戏 蛋糕 游荡的奶牛 决斗
动态规划DP 硬币 蛋糕塔 游荡的奶牛 格斗 硬币 题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为"Xoinc"的两人硬币游戏. 初始时,一个有N(5 <= N ...
- [usaco 2009 dec]游荡的奶牛
游荡的奶牛 题目描述 FJ 有 N (1 <= N <= 50,000)头牛,FJ的草地可以认为是一条直线. 每只牛只喜欢在某个特定的范围内吃草.第i头牛喜欢在区间(S_i, E_i)吃草 ...
最新文章
- LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
- 计算机c语言二级题型,计算机二级C语言题型和评分标准
- 编程中的蛇形填空问题_PCB—蛇形线的作用,这次真的是把你搞懂了
- hello, noip2017!
- Redis回收进程如何工作的?
- java嵌套类中的方法怎么调用_java类与嵌套嵌套后,怎么使用最外层的类建立对象后使用内部类的方法?...
- HALCON 21.11:深度学习笔记(2)
- visual stadio.net已检测到web服务器运行的不是asp.net1.1版故障的排除
- 计算机毕业设计最新选题汇总(持续更新)
- GB50174《电子信息系统机房设计规范》(福建)贯标培训通知
- 计算机软件考试大纲,求计算机软件资格考试大纲和复习资料
- 两种双绞线的线序568A与568B
- HTML制作诗词,利用 html2canvas 做个简单的诗词卡片生成器
- P and V
- 详细讲解D3D8里面的2D图形编程(转)
- java.sql.SQLException: HOUR_OF_DAY: 2 -> 3
- 如何正确开展网络口碑营销?
- 游戏服务端框架之使用Redis实现跨服排行榜
- iOS程序闪退的原因以及处理办法
- 阿里又孵出一只2000亿猛兽,马云当年的眼光太狠了
热门文章
- Java笨狗的C/C++
- AndroidStudio - - - 点击头像更换头像_菜单选择_相机拍照与相册获取
- 【效率为王】超详细 Hexo + Github Pages 博客搭建教程
- 那些年,我们一起做过的 Java 课后练习题(61 - 65)
- 最详细的宝塔青龙面板搭建教程
- 【Codeforces 741 B. Arpa's weak amphitheater and Mehrdad's 】+ 并查集 + 01背包
- visudo精确用户赋权与sudo日志跟踪
- 有哪些你看过五遍以上的电影?
- 通道(channel)
- MKS电源维修RPG-50A射频电源维修OPTIMA RPG系列