求助,20
查看原帖
求助,20
1022773
wxkandwxk楼主2023/6/16 12:56
#include<stdio.h>
#include<iostream>
int p[30][30];
int m,n,j,k;
int max(int a,int b){
    if (a>b)return a;
    return b;
}
int main() {
	scanf("%d%d%d%d", &m, &n,&j,&k);
	p[0][0]=1;
    p[j][k]=-1;
    if(j>=1&&k>=2)p[j-1][k-2]=-1;
    if(j>=2&&k>=1)p[j-2][k-1]=-1;
    if(j>=2)p[j-2][k+1]=-1;
    if(j>=1)p[j-1][k+2]=-1;
    if(k>=2)p[j+1][k-2]=-1;
    if(k>=1)p[j+2][k-1]=-1;
    p[j+1][k+2]=p[j+2][k+1]=-1;
    for (int i=1;i<=m+n;i++){
        for(int u=max(0,i-n);(u<=i)&&u<=m&&i-u<=n;u++){
            if(p[u][i-u]!=-1){
                if(u>0&&p[u-1][i-u]!=-1)p[u][i-u]+=p[u-1][i-u];
                if(i-u>0&&p[u][i-u-1]!=-1)p[u][i-u]+=p[u][i-u-1];
            }
        }
    }
    /*for (int i=0;i<=m;i++){
        for(int u=0;u<=n;u++){
            printf("%d ",p[i][u]);
            }
        
        printf("\n");
    }*/
    printf("%d",p[n][m]);
}
2023/6/16 12:56
加载中...