60分

回复帖子

@Jaim 2020-08-16 19:52 回复
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    unsigned long long a,b,n,m,q[21][21]={0};
    bool ma[21][21]={0};
    scanf("%llu%llu%llu%llu",&n,&m,&a,&b);
    //边界
    for(unsigned long long i=0;i<=n;i++) q[i][0]=1;  
    for(unsigned long long i=0;i<=m;i++) q[0][i]=1;
    //马的控制点
    ma[a][b]=1;      q[a][b]=0;                      
    ma[a+1][b+2]=1;  q[a+1][b+2]=0;
    ma[a-1][b+2]=1;  q[a-1][b+2]=0;
    ma[a+2][b+1]=1;  q[a+2][b+1]=0;
    ma[a-2][b+1]=1;  q[a-2][b+1]=0;
    ma[a+1][b-2]=1;  q[a+1][b-2]=0;
    ma[a-1][b-2]=1;  q[a-1][b-2]=0;
    ma[a+2][b-1]=1;  q[a+2][b-1]=0;
    ma[a-2][b-1]=1;  q[a-2][b-1]=0;
    //递推 
    for(unsigned long long i=1;i<=n;i++)             
    for(unsigned long long j=1;j<=m;j++)
    if(ma[i][j]==0) q[i][j]=q[i-1][j]+q[i][j-1];
    printf("%llu",q[n][m]);
    return 0;
} 
@Jaim 2020-08-16 20:08 回复 举报

@xutongwei 谢谢,问题

还在,还是60分。3和4过不了……难道这就是人生吗?

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    unsigned long long a,b,n,m,q[31][31];
    bool ma[31][31]={0};
    scanf("%llu%llu%llu%llu",&n,&m,&a,&b);
    a+=10; b+=10;
    n+=10; m+=10;
    //边界
    for(unsigned long long i=10;i<=n;i++) q[i][10]=1;  
    for(unsigned long long i=10;i<=m;i++) q[10][i]=1;
    //马的控制点
    ma[a][b]=1;      q[a][b]=0;                      
    ma[a+1][b+2]=1;  q[a+1][b+2]=0;
    ma[a-1][b+2]=1;  q[a-1][b+2]=0;
    ma[a+2][b+1]=1;  q[a+2][b+1]=0;
    ma[a-2][b+1]=1;  q[a-2][b+1]=0;
    ma[a+1][b-2]=1;  q[a+1][b-2]=0;
    ma[a-1][b-2]=1;  q[a-1][b-2]=0;
    ma[a+2][b-1]=1;  q[a+2][b-1]=0;
    ma[a-2][b-1]=1;  q[a-2][b-1]=0;
    //递推 
    for(unsigned long long i=11;i<=n;i++)             
    for(unsigned long long j=11;j<=m;j++)
    if(ma[i][j]==0) q[i][j]=q[i-1][j]+q[i][j-1];
    printf("%llu",q[n][m]);
    return 0;
} 
@yangsonghan 2020-08-16 20:41 回复 举报

@sdzx 我说的是边界,就是(0,i)和(i,0)的地方,因为只能从一边过来,所以只要上面有一个地方不能走,就不能通

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。