题意

​传送门​

题解

先走长的,再走短的一定最优。

也就是说,假设

BZOJ 3260: 跳 (组合恒等式)_时间复杂度

,行进路线为

BZOJ 3260: 跳 (组合恒等式)_#pragma_02

然后第一行答案为

BZOJ 3260: 跳 (组合恒等式)_时间复杂度_03

第二行就是

BZOJ 3260: 跳 (组合恒等式)_c++_04

显然的组合恒等式

BZOJ 3260: 跳 (组合恒等式)_c++_05

其中

BZOJ 3260: 跳 (组合恒等式)_#pragma_06

为较小值,

BZOJ 3260: 跳 (组合恒等式)_时间复杂度_03

为较大值。可以直接算了。因

时间复杂度

BZOJ 3260: 跳 (组合恒等式)_时间复杂度_08

CODE

#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;
const int MAXN = 1e6 + 5;
int inv[MAXN];
inline int C(LL n, LL m) { n %= mod;
LL re = 1; inv[0] = inv[1] = 1;
for(int i = 2; i <= m; ++i) inv[i] = 1ll * (mod - mod/i) * inv[mod%i] % mod, re = re * inv[i] % mod;
for(int i = 1; i <= m; ++i) re = re * (n-i+1) % mod;
return re;
}
int main () { LL n, m;
scanf("%lld%lld", &n, &m);
printf("%lld\n", (max(n, m) + C(n+m+1, min(n, m))) % mod); //C(n+m+1,max(n+1,m+1))
}