测试点5错误
查看原帖
测试点5错误
864579
angrycookie楼主2022/11/4 12:43
#include <stdio.h>
#include <string.h>

#define inbound(x,y) ((x <= row && x >= 0) && (y <= row && y >= 0))
#define abs(val) (val & (1 << 31) ? -val : val)

using namespace std;


int main(){
    volatile long long int dp [31][31];
    memset((void *)dp, 0, sizeof(dp));
    int row,col,mx,my;
    scanf("%d %d %d %d",&row,&col, &mx, &my);
    int m[]{-2,-1,1,2}, x, y;
    for(int i = 0;i < 4;i++){
        x = mx + m[i];
        y = my + 3 - abs(m[i]);
        if(inbound(x,y)){
            dp[x][y] = -1;
        }
        y = my - 3 + abs(m[i]);
        if(inbound(x,y)){
            dp[x][y] = -1;
        }
    }
    dp[0][0] = 1;
    dp[mx][my] = -1;
    for(int i = 0;i <= row;i++){
        for(int j = 0;j <= col;j++){
            if((i || j) && dp[i][j] != -1){
                if(inbound(i - 1,j) && dp[i - 1][j] > 0) dp[i][j] += dp[i - 1][j];
                if(inbound(i,j - 1) && dp[i][j - 1] > 0) dp[i][j] += dp[i][j - 1];
            }
        }
    }
    printf("%lld\n",dp[row][col] == -10 : dp[row][col]);
}

这是我提交的代码。完全没有思路那里可能有错,求诸位救一下。(还有5的测试点是什么啊)

2022/11/4 12:43
加载中...