前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【hrbust2293】棋盘村

【hrbust2293】棋盘村

作者头像
饶文津
发布2020-06-02 12:04:56
3510
发布2020-06-02 12:04:56
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏

题意

哈理工2016级新生程序设计全国邀请赛A题 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2293 (0,0)走到(n,m)有多少种走法,每次向下或向右,其中(x,y)和(x,y)走日字能到的点不能走。 1<n,m<20

题解

递推,f[i][j]=f[i-1][j]+f[i][j-1] 边界:f[0][0]=1。

代码

代码语言:javascript
复制
#include<cstdio>
#include<cstring>
int n,m,x,y;
long long f[25][25]={1};//注意开long long
bool no[25][25];
int dx[9]={-2,-2,-1,-1,1,1,2,2},
    dy[9]={1,-1,2,-2,2,-2,1,-1};
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d%d",&n,&m,&x,&y);
        memset(no,0,sizeof no);
        no[x][y]=1;
        for(int i=0;i<8;i++)
            if(x+dx[i]>=0&&y+dy[i]>=0)//注意判断范围
                no[x+dx[i]][y+dy[i]]=1;//代表不能走
        for(int i=0;i<=n;i++)
        for(int j=0;j<=m;j++)
            if(!no[i][j]){//可行的点
                if(i||j)//不能更新f[0][0],因为它是我们的边界值
                    f[i][j]=(i?f[i-1][j]:0)+(j?f[i][j-1]:0);
            }else
                f[i][j]=0;
        printf("%lld\n",f[n][m]);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-12-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 题解
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档