#include<bits/stdc++.h>
using namespace std;
int d,t,m;
const int M=4000;
int dp[80][80][80];
int main() {
cin>>d>>t>>m;
dp[0][0][d]=1;
for(int i=1; i<=t; i++) {
for(int j=0; j<=m; j++) {
for(int k=d; k<=d+m; k++) {
if(j>=1&&k-1>=0)
dp[i][j][k]+=dp[i-1][j-1][k-1];
dp[i][j][k]+=dp[i-1][j][k+1];
}
for(int k=d; k>0; k--) {
if(j>=1&&k-1>=0)
dp[i][j][k]+=dp[i-1][j-1][k-1];
dp[i][j][k]+=dp[i-1][j][k+1];
}
}
}
int ans=0;
//for(int i=1;i<=t;i++)
//for(int j=1;j<=m;j++)
//for(int k=1;k<=d+m;k++)
//cout<<dp[i][j][k]<<" ";
for(int k=d+m; k>0; k--) ans+=dp[t][m][k];
cout<<endl<<ans;
}
dp[i][j][k] i表示过去了多少秒,j表示消耗了多少体力,k表示距离峡谷的距离,我是这样想的,每一秒的状态无非就是上一秒消耗体力或是不消耗体力,消耗体力的话距离+1,不消耗体力距离就-1,因为i==0&&j==0时距离峡谷为d,之后要么往上游,要么往下游,分开进行状态转移,所以有两个循环,最后再把i==t,j==m同时k>0的数量加在一起就是总的方法数,我感觉我想的应该没什么问题,但结果不对,求大佬看看我的思路是哪里出错了