toj4124.Function

本文介绍了一种使用预处理和递推方法解决特定路径计数问题的有效方案,并提供了一个C++实现示例。该方法通过动态规划避免了重复计算,显著提高了求解效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值