菜鸟求大佬帮帮。。。34测试点过不去
查看原帖
菜鸟求大佬帮帮。。。34测试点过不去
599730
Armour072楼主2021/11/11 21:14
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
long long int dp[50][50];
int bx,by,mx,my;


int walk(int a,int b)
{
    int i,j;
    if(a==bx&&b==by)return 1;
    if(a>bx||b>by)return 0;
    for(int i=a;i<=bx;i++){
	
        for(int j=b;j<=by;j++)
        if(dp[i][j]!=-1){
            if(i==0&&j==0)dp[i][j]=1;
            else if(i==0)dp[i][j]+=dp[i][j-1];
            else if(j==0)dp[i][j]+=dp[i-1][j];
            else dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }else{
        	dp[i][j]=0;
		}
	}
    return dp[bx][by];
}


int main()
{
	
    scanf("%d %d %d %d",&bx,&by,&mx,&my);
    for(int i=0;i<=bx;i++)
        for(int j=0;j<=by;j++)
        {
            if((abs(i-mx)==2)&&(abs(j-my)==1))dp[i][j]=-1;
            else if((abs(i-mx)==1)&&(abs(j-my)==2))dp[i][j]=-1;
            else if(i==mx&&j==my)dp[i][j]=-1;
            else dp[i][j]=0;
        }
    int ret=walk(0,0);
    if(ret==-1)ret=0;
    
    printf("%lld",ret);
}
2021/11/11 21:14
加载中...