P8725 题解
FutureSnow · · 题解
题目传送门
比较明显的 DP。
设
于是我们枚举时间和体力转移。我们通过时间和体力算出距离,用了多少体力就向上游了多少。设原始距离为
如果当前状态所在位置
两种决策分别表示不用体力和用体力。
计算时别忘了取模。
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int f[3030][3030];
int d, t, m;
int main(){
cin >> d >> t >> m;
f[0][m] = 1;
for (int i = 1; i <= t; ++i) {
for (int j = 0; j <= m; ++j) {
int len = d + (m - j) - (i - (m - j));
if (len > 0) {
f[i][j] = (f[i - 1][j] + f[i - 1][j + 1]) % mod;
}
}
}
cout << f[t][0] << endl;
return 0;
}