一开始直接用数学公式去推,结果到比赛结束也没有做出来,
正确方法应该是预处理+递推
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define inf -0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define mem(a, b) memset(a, b, sizeof(a))
typedef long long ll;
unsigned f[101][201][201];
int main()
{
int n,m,k;
mem0(f);
for(int i=0;i<=100;i++)
f[0][i][i]=1;
for(int k=1;k<=100;k++) //走了几次
for(int i=0;i<=200;i++) //从哪里出发
for(int j=0;j<=200;j++){ //现在的位置
if(j>=1)
f[k][i][j]=f[k-1][i][j-1]+f[k-1][i][j+1];
else
f[k][i][j]=f[k-1][i][j+1];
}
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
printf("%u\n",f[k][n][m]);
}
return 0;
}