\(Des\)

有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数.

\(Sol\)

如果只限制了向左或向右走的次数就要简单一些,所以我们先思考这一种情形.

假设只限制了向左走不能超过\(l\)次.这样转化:对于每个点,它向左走花费的代价是\(1\),其他方向的代价是\(0\).求从给定起点出发,走到每一个点的最小花费.对于某一个点,如果这个花费是\(\leq l\)的,那么这个位置就是可达的.这不就是\(01\)最短路嘛.

现在考虑第二个限制.其实可以发现从起点走到一个特定的点,若向左走的步数一定,那么向右走的步数也是一定的,而且向左走的步数越少,向右走的步数也越少.也就是说,在只考虑一个限制时跑的最短路在考虑两个限制时仍然是最短路.于是就直接按照上面讲的做就好了,统计答案的时候考虑两个限制.

其实,并不需要求出所有的最短路,只要满足限制的点向别的点转移就可以了.

\(Code\)

Code

```cpp
#include
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&cq;
int main()
{
n=read(),m=read();rx=read(),ry=read();l=read(),r=read();
go(i,1,n)scanf("%s",(s[i]+1));
q.push_back((nd){rx,ry,0,0});
while(q.size())
{
nd nw=q.front();Ri nx=nw.x,ny=nw.y,nl=nw.l,nr=nw.r;q.pop_front();
if(nl>l || nr>r || vis[nx][ny])continue;
vis[nx][ny]=1;++as;
go(i,0,3)
{
Ri tx=nx+dx[i],ty=ny+dy[i];
if(txn || tym || s[tx][ty]=='*')continue;
nd tw=(nd){tx,ty,nl+(i==1),nr+(i==0)};
if(i==1)q.push_back(tw);
else q.push_front(tw);
}
}
printf("%d\n",as);
return 0;
}

<details>

随机推荐

  1. Django之内置组件

    Django组件介绍       分页器的使用       Form       modelForm       orm       cookie和session       中间件       信号 ...

  2. 08Redis入门指南笔记(集群)

    即使使用哨兵,此时的 Redis 集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于所有节点中,内存最小的数据库节点,形成木桶效应. 对 Redis 进行水平扩容,在旧版Red ...

  3. mysql数据库之存储引擎

    mysql存储引擎概述 什么是存储引擎?                                                               MYSQL中的数据用各不相同的技术 ...

  4. SCSS语法格式及编译调试

    一.SASS编译 Sass 的编译有多种方法: 命令编译 GUI工具编译 自动化编译 1.1 命令编译 1)单文件编译 sass <要编译的Sass文件路径>/style.scss:< ...

  5. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...

  6. mac默认截图、截图代码

    苹果系统自带截图功能   1 截取全屏:快捷键(Shift+Command+3) 直接按“Shift+Command+3“快捷键组合,即可截取电脑全屏,图片自动保存在桌面. 2 截图窗口:快捷键(Sh ...

  7. python基础十五之递归函数

    递归函数,在函数中调用自身函数,就会形成一个递归函数.例如: def recursion(n): n += 1 print(n) recursion(n) 由于递归函数的结构,在函数调用时,它会一直调 ...

  8. Java发送邮件Demo

    就是个Demo,有使用Spring的东西 package xxxxxxx.common.utils; import org.springframework.mail.javamail.JavaMail ...

  9. Anagram——[枚举全排列]

    预备知识: 1.求0—n个数全排列的算法: void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i<cur;i++) cout& ...

  10. 2018-8-10-dot-net-core-使用-IPC-进程通信

    title author date CreateTime categories dot net core 使用 IPC 进程通信 lindexi 2018-08-10 19:16:52 +0800 2 ...