题意:类似汉诺塔问题,但是需要分析细节。
题解: 荷叶数为,石墩数为
。
当,那么最多先
个到荷叶,第
个到终点。
当,那么最多
个到荷叶和石墩,然后荷叶上的
个再到石墩。情况转换为
的情况,两者相加即
当,那么最多先
个到荷叶和石墩1,然后荷叶上的到石墩1,之后再有
个到荷叶和石墩2,然后这
个到石墩1。情况转换为了
的情况,两者相加为
。注意:此时不能先有
个到石墩1和石墩2,然后都到石墩1,之后再有
个到石墩2和荷叶,再到石墩1,这样的话即使后面可以按照
的情况走下去,但是因为全程要符合青蛙的高低顺序,那么就要使得石墩1的最面的青蛙解放,但是解放时,只能给最上面的
个释放到石墩2,然后只剩
个石墩+荷叶但是有
个青蛙,无法释放最底的青蛙,故不行。
那么通式就是.
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n, m; int main() { scanf("%lld%lld", &n, &m); printf("%lld\n", (1ll << n) * (m + 1)); return 0; }