Iroha and a Grid(动态规划)

本文介绍了Iroha在一个H行W列的网格中避开A行B列行走的问题,需要求解合法路径的数量。通过动态规划和递推的方法解决,避免了搜索导致的时间超时。在动态规划的数组中,每个点的可行路径由其上方和左侧的路径总数决定,并特别处理起点与禁行点重合的情况,输出合法路径的模10^9 + 7的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Iroha and a Grid
总时间限制: 1000ms 内存限制: 65536kB
描述
有一个 H 行 W 列的网格。
Iroha 现在站在左上角 (1, 1)。 她每次会向右或向下走,直到走到右下角 (H, W)。
唯一的限制是,她不能走到左下方的 A 行 B 列。
求行走的方案数对 10^9 + 7 取模。
输入
第1行:4个整数H W A B
输出
第1行:1个整数,表示答案
样例输入
【样例1输入】
2 3 1 1
【样例2输入】
10 7 3 4
样例输出
【样例1输出】
2
【样例2输出】
3570
提示
【样例1解释】
我们有一个 2×3 的网格,但是左下角的格子无法通过。合法路线有两种 “右右下” 和 “右下右”。
【数据规模】
1 ≦ H, W ≦ 34
1 ≦ A ≦ H
1 ≦ B ≦ W

思路点拔:首先,这道题不要用搜索,虽然可以得大半的分,但还是会超时,我就不上超时代码了^_^,所以本题就要用动态规划(其实就是递推),首先定义一个bool型的数组,来记录这个点是否能走,如果能走,再判断边界,因为只能向左或向走,所以第一行和第一列的点都只有一种走法,然后每个点的走法等于这个点上面的走法加左边的走法,最后,注意讨论一种极端情况:当起点与不能走的点重合时,就输出0,这样,就避免了超时。
上代码!!

#include<cstdio>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值