toj4124.Function

一开始直接用数学公式去推,结果到比赛结束也没有做出来,
正确方法应该是预处理+递推

#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;
}

你可能感兴趣的:(toj4124.Function)