[题解]USACO 5.2.1 Snail Trails
链接:http://cerberus.delos.com:791/usacoprob2?S=snail&a=uzElkgTaI9d
描述:有障碍的棋盘上的搜索,求从左上角出发最多经过多少个格子。
思路:暴搜
我的实现:
1 /*
2 ID:zhangyi20
3 PROG:snail
4 LANG:C++
5 */
6 #include <iostream>
7 #include <cstdio>
8 #include <cmath>
9 using namespace std;
10 #define MaxN 120
11 int N,B;
12 int mat[MaxN+5][MaxN+5];//0空地 1障碍 2走过
13 int Dfs(int i,int j,int Dir)//方向:0向上,1向右,2向下,3向左
14 {
15 mat[i][j]=2;
16 int Ret=0,i_=i,j_=j;
17 int tmp1=-1,tmp2=-1;
18 if(Dir==0)//向上
19 {
20 for(i=i-1; ;--i,++Ret)
21 {
22 if(mat[i][j])
23 break;
24 mat[i][j]=2;
25 }
26 if(mat[i][j]==1)//转向
27 {
28 if(mat[i+1][j-1])
29 tmp1=0;
30 else
31 tmp1=Dfs(i+1,j,3);
32 if(mat[i+1][j+1])
33 tmp2=0;
34 else
35 tmp2=Dfs(i+1,j,1);
36 Ret+=max(tmp1,tmp2);
37 }
38 for(i=i+1;i<=i_;++i)
39 mat[i][j]=0;
40 }
41 else if(Dir==1)//向右
42 {
43 for(j=j+1; ;++j,++Ret)
44 {
45 if(mat[i][j])
46 break;
47 mat[i][j]=2;
48 }
49 if(mat[i][j]==1)//转向
50 {
51 if(mat[i-1][j-1])
52 tmp1=0;
53 else
54 tmp1=Dfs(i,j-1,0);
55 if(mat[i+1][j-1])
56 tmp2=0;
57 else
58 tmp2=Dfs(i,j-1,2);
59 Ret+=max(tmp1,tmp2);
60 }
61 for(j=j-1;j>=j_;--j)
62 mat[i][j]=0;
63 }
64 else if(Dir==2)//向下
65 {
66 for(i=i+1; ;++i,++Ret)
67 {
68 if(mat[i][j])
69 break;
70 mat[i][j]=2;
71 }
72 if(mat[i][j]==1)//转向
73 {
74 if(mat[i-1][j-1])
75 tmp1=0;
76 else
77 tmp1=Dfs(i-1,j,3);
78 if(mat[i-1][j+1])
79 tmp2=0;
80 else
81 tmp2=Dfs(i-1,j,1);
82 Ret+=max(tmp1,tmp2);
83 }
84 for(i=i-1;i>=i_;--i)
85 mat[i][j]=0;
86 }
87 else//向左
88 {
89 for(j=j-1; ;--j,++Ret)
90 {
91 if(mat[i][j])
92 break;
93 mat[i][j]=2;
94 }
95 if(mat[i][j]==1)//转向
96 {
97 if(mat[i-1][j+1])
98 tmp1=0;
99 else
100 tmp1=Dfs(i,j+1,0);
101 if(mat[i+1][j+1])
102 tmp2=0;
103 else
104 tmp2=Dfs(i,j+1,2);
105 Ret+=max(tmp1,tmp2);
106 }
107 for(j=j+1;j<=j_;++j)
108 mat[i][j]=0;
109 }
110 return Ret;
111 }
112 int main()
113 {
114 freopen("snail.in","r",stdin);
115 freopen("snail.out","w",stdout);
116 scanf("%d%d",&N,&B);
117 int i,j;
118 char c;
119 for(i=1;i<=B;++i)
120 {
121 do
122 {
123 scanf("%c",&c);
124 }while(c<'A'||c>'Z');
125 scanf("%d",&j);
126 mat[j][c-'A'+1]=1;
127 }
128 for(i=1;i<=N;++i)
129 mat[0][i]=mat[N+1][i]=mat[i][0]=mat[i][N+1]=1;//给地图四周打上障碍
130 mat[1][1]=2;
131 printf("%d\n",max(Dfs(1,1,1),Dfs(1,1,2))+1);
132 return 0;
133 }
[题解]USACO 5.2.1 Snail Trails的更多相关文章
- USACO 5.2 Snail Trails
Snail TrailsAll Ireland Contest Sally Snail likes to stroll on a N x N square grid (1 <n <= 12 ...
- 洛谷——P1560 [USACO5.2]蜗牛的旅行Snail Trails
P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...
- 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)
P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...
- [题解]USACO 1.3 Ski Course Design
Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...
- [题解]USACO 1.3 Wormholes
Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...
- 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails
题目链接 题解 一看题没什么思路.写了个暴力居然可过?! Code #include<bits/stdc++.h> #define LL long long #define RG regi ...
- [USACO5.2]蜗牛的旅行Snail Trails(有条件的dfs)
题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总是从棋盘的左上角出发.棋盘上有空的格子(用“.”来表示)和B 个路障 ...
- 题解 [USACO Mar08] 奶牛跑步
[USACO Mar08] 奶牛跑步 Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所 ...
- [USACO5.2]Snail Trails
嘟嘟嘟 一道很水的爆搜题,然后我调了近40分钟…… 错误:输入数据最好用cin,因为数字可能不止一位,所以用scanf后,单纯的c[0]为字母,c[1]数字………………………… #include< ...
随机推荐
- leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II
54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- 【机器学习】HMM
机器学习算法-HMM 目录 机器学习算法-HMM 1. 模型定义 2. 序列生成 3. 概率计算 3.1 前向计算 3.2 后向计算 4. 学习 4.1 求解 4.2 求解 4.3 求解 5. 预测 ...
- 【计算机理论】CSAPP ch2
信息存储 十六进制表示法 (略) 字数据大小 大多数计算机使用8bit的块(字节)作为最小的可寻址的内存单元 字长指明了指针数据的标称大小(?) 64位系统和32位系统向后兼容 C语言中有些数据类型的 ...
- VS IDE之xml过大报错
语料处理时遇到这个错误 在命令行中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual Studio\ ...
- Cobbler批量安装操作系统
1,关闭selinux getenforce 查看selinux状态 Disabled 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=di ...
- golang源码阅读:VictoriaMetrics中的协程优先级的处理方式
在阅读VictoriaMetrics的源码的时候,读到了那么平平无奇的一段: // AddRows adds the given mrs to s. func (s *Storage) AddRows ...
- echarts图表的封装
其实echarts官网有个快速上手的教程,一般人看一遍也知道是怎么回事,先给个传送门吧--五分钟上手 引入方式多种多样就自己去官网看了--这里简单介绍echarts怎么用,下方的封装函数比较重要 1. ...
- Func<>用法
Func是一个委托,委托里面可以存方法,Func<string,string>或Func<string,string,int,string>等 前几个是输入参数,最后一个是返回 ...
- CDN 的缓存与回源机制解析
CDN的缓存与回源机制解析 CDN (Content Delivery Network,即内容分发网络)指的是一组分布在各个地区的服务器.这些服务器存储着数据的副本,因此服务器可以根据哪些服务器与用户 ...
- 总结一下Mac快捷键的图形符号
Mac中主要有四个修饰键,分别是Command,Control,Option和Shift.这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键.