60分救一下
查看原帖
60分救一下
301173
CDX0721楼主2024/10/17 23:38
#include <stdio.h>
int mark[30][30]={0};
long long int point[30][30]={0};
int x1,y1,x2,y2;
int main()
{
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    x1++;x2++;y1++;y2++;
    mark[x2][y2]=1;
    mark[x2+1][y2+2]=1;
    mark[x2+2][y2+1]=1;
    int list[2][6]={{x2-1,x2-1,x2-2,x2-2,x2+1,x2+2},{y2+2,y2-2,y2+1,y2-1,y2-2,y2-1}};
    for (int i=0;i<6;i++)
    {
       if (list[0][i]>=0&&list[1][i]>=0)
       mark[list[0][i]][list[1][i]]=1; 
    }
    point[1][1]=1;
    for (int i=1;i<=x1;i++)
    {
        for (int j=1;j<=y1;j++)
        {
            if (mark[i][j]){/*printf("0  ");*/continue;}
            point[i][j]+=point[i-1][j]+point[i][j-1];/*printf("%-3.d",point[i][j])*/;
        }
    }
    printf("%d",point[x1][y1]);
    return 0;
}

NOIP 2002 普及组第四题 mark数组表示目标格子是否有阻挡 list数组用来存放马能阻挡的格子相对位置 point数组存放每个格子能到达的方案数 本人刚学C语言不久使用的算法看起来可能有些诡异的繁杂,请各位大佬见谅 算法上感觉没问题,但是3号与4号WA了 求救

2024/10/17 23:38
加载中...