测试点34过不了,只用了一个二维数组,求大佬看看原因
查看原帖
测试点34过不了,只用了一个二维数组,求大佬看看原因
599730
Armour072楼主2021/10/30 10:01
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<vector>
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;
        }
    long long int ret=walk(0,0);
    if(ret==-1)ret=0;
    
    printf("%lld",ret);
}
2021/10/30 10:01
加载中...