这个题读起来内容比较多,但是实现起来确实比较好实现
[NOI2000] 青蛙过河
题目描述
大小各不相同的一队青蛙站在河左岸的石墩(记为 A)上,要过到对岸的石墩(记为 D)上去。河心有几片荷叶(分别记为 Y 1 … Y m Y_1 \dots Y_m Y1…Ym)和几个石墩(分别记为 S 1 … S n S_1\dots S_n S1…Sn)。图示如下:
青蛙的站队和移动方法规则如下:
- 每只青蛙只能站在荷叶、石墩,或者仅比它大一号的青蛙背上(统称为合法的落脚点);
- 一只青蛙只有背上没有其它青蛙的时候才能够从一个落脚点跳到另一个落脚点;
- 青蛙允许从左岸 A 直接跳到河心的石墩、荷叶和右岸的石墩 D 上,允许从河心的石墩和荷叶跳到右岸的石墩 D 上;
- 青蛙在河心的石墩之间、荷叶之间以及石墩和荷叶之间可以来回跳动;
- 青蛙在离开左岸石墩后,不能再返回左岸;到达右岸后,不能再跳回;
- 假定石墩承重能力很大,允许无论多少只青蛙都可呆在上面。但是,由于石墩的面积不大,至多只能有一只青蛙直接站在上面,而其他的青蛙只能依规则 1 落在比它大一号的青蛙的背上。
- 荷叶不仅面积不大,而且负重能力也有限,至多只能有一只青蛙站在上面。
- 每一步只能移动一只青蛙,并且移动后需要满足站队规则;
- 在一开始的时候,青蛙均站在 A 上,最大的一只青蛙直接站在石墩上,而其它的青蛙依规则 6 站在比其大一号的青蛙的背上。
青蛙希望最终能够全部移动到 D 上,并完成站队。
设河心有 m m m 片荷叶和 n n n 个石墩,请求出这队青蛙至多有多少只,在满足站队和移动规则的前提下,能从 A 过到 D。
你的任务是对于给出的 n , m n,m n,m,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河。
输入格式
输入两个整数 n , m n,m n,m。
输出格式
一个整数,表示最多能有多少只青蛙可以根据以上规则顺利过河。
样例 #1
样例输入 #1
1 1
样例输出 #1
4
提示
n ≤ 20 n \leq 20 n≤20, m ≤ 1 0 3 m \leq 10^3 m≤103。
Scratch实现
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容