【80分】#3time out
查看原帖
【80分】#3time out
1024039
AAmySnail楼主2023/6/24 18:04
#include<iostream>
#include<cmath>
using namespace std;
int pathNum(int i,int j);
bool isPass(int i,int j);

int a,b,c,d;

int main(){
    
    long long l[20][20];
    l[0][0]=1;
    cin>>a>>b>>c>>d;
    /*
    for(int i=0;i<=a;i++){
        for(int j=0;j<=b;j++){
            if(!isPass(i,j,c,d)){
                continue;
            }
        }
    }*/
    
    for(int i=0;i<=a;++i){
        for(int j=0;j<=b;++j){
            if(i>0||j>0){
                l[i][j]=0;
            }
            if(isPass(i,j)){
                if(j){
                l[i][j]+=l[i][j-1];
                }
                if(i){
                    l[i][j]+=l[i-1][j];
                }
                
            }
            
        }
    }
    cout<<l[a][b];
    return 0;
    //return pathNum(0,0);
    
}
bool isPass(int i,int j){
    if(abs(i-c)==2&&abs(j-d)==1){
        return false;
    }else if(abs(i-c)==1&&abs(j-d)==2){
        return false;
    }else if(i==c&&j==d){
        return false;
    }else{
        return true;
    }
}

/*递归,但是老出不来结果*/
int pathNum(int i,int j){
    if(i==a&&j==b){
        return 1;
    }
    int i1=0,j1=0;
    if(i+1<=a&&isPass(i+1,j)){
        i1=pathNum(i+1,j);
    }
    if(j+1<=b&&isPass(i,j+1)){
        j1=pathNum(i,j+1);
    }
    return i1+j1;
}

为什么#3会time out呢?难道是我的isPass逻辑不对吗?我看很多标准答案是提供了数组以空间算时间,但这个函数的逻辑很简单,理论上就算每个点都跑一遍这个函数也耗不了太多的时间哈 本来写了一个递归,但0分,真是伤脑筋 哈哈哈 函数在最下面,南顶~

2023/6/24 18:04
加载中...