救,60分
查看原帖
救,60分
1168199
leidayu楼主2023/10/24 17:09
#include<iostream>
using namespace std;

long long solution(int n, int m, int x1, int y1) {
    long long**dp=new long long*[n+1];
    if (!x1 && !y1) {
        return 0;
    }
    for (int i = 0; i <= n; i++) {
        dp[i] = new long long[m + 1];
    }
    int flag;

    dp[0][0] = 1;
    for (int i = 0, flag = 1; i <= n; i++) {
        if (!flag || i == x1 - 2 && y1 == 1 || i == x1 - 1 && y1 == 2 || i == x1 + 1 && y1 == 2 || i == x1 + 2 && y1 == 1 || i == x1 && !y1) {
            dp[i][0] = 0;
        }
        else {
            dp[i][0] = 1;
        }
    }
    for (int j = 0, flag = 1; j <= m; j++) {
        if (!flag || x1 == 2 && j == y1 - 1 || x1 == 1 && j == y1 - 2 || x1 == 1 && j == y1 + 2 || !x1 && j == y1||x1==2&&j==y1+1) {
            dp[0][j] = 0;
            flag = 0;
        }
        else {
            dp[0][j] = 1;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (i==x1-2&&(j==y1-1||j==y1+1)||i==x1-1&&(j==y1-2||j==y1+2)||i==x1+2&&(j==y1-1||j==y1+1)||i==x1+1&&(j==y1-2||j==y1+2)||x1==i&&y1==j) {
                dp[i][j] = 0;
            }
            else if(dp[i-1][j]&&dp[i][j-1]) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
            else {
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            }
        }
    }
    return dp[n][m];
}

    int main(){
        int n, m, x1, y1;
        cin >> n >> m >> x1 >> y1;
        cout<<solution(n, m, x1, y1);
    }
2023/10/24 17:09
加载中...