求助,想直接深搜,不知道问题在哪,样例也没过,哪位大神帮帮忙

回复帖子

@Pavilion。。 2020-08-16 14:34 回复
#include <iostream>
#include <cstring>
using namespace std;
int bx,by,hx,hy;
int count=0,count1=0;
int f[1000][1000]={0};
int xx[2]={1,0},yy[2]={0,1};
int ax[10]={0,1,1,-1,-1,2,2,-2,-2},ay[10]={0,2,-2,2,-2,1,-1,1,-1};
void dfs(int x,int y){
    if(x==bx&&y==by){
        count++;
        return ;
    }
    for(int i=0; i<2; i++){
        int Ax=x+xx[i], Ay=y+yy[i];
        count1=0;
        for(int j=0; j<=8; j++){
            int Hx=hx+ax[i],Hy=hy+ay[i];
            if(Ax!=Hx&&Ay!=Hy){
                count1++;
            }
            else break;
        }
        if(Ax<=bx&&Ay<=by&&!f[Ax][Ay]&&count1==9){
            f[Ax][Ay]=1;
            dfs(Ax,Ay);
            f[Ax][Ay]=0;
        }
    }
}
int main(){
    cin>>bx>>by>>hx>>hy;
    memset(f,0,sizeof(f));
    f[0][0]=1;
    dfs(0,0);
    cout<<count<<endl;
    return 0;
}
@Andy_chen 2020-08-16 14:59 回复 举报

难道是

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll C(int m,int n)
{
    if(n<0 || m<0 || n<m)
        return 0;
    ll tot=1;
    for(int i=1;i<=m;i++)
    {
        tot*=n-i+1;
        tot/=i;
    }
    return tot;
}
int n,m,x,y;
int rt[5][5]={
0,0,1,0,0,
0,0,1,1,0,
0,0,0,1,1};
int dw[5][5]={
{},
{},
1,1,0,0,0,
0,1,1,0,0,
0,0,1,0,0};
int main()
{
    cin>>n>>m>>x>>y;
    if(n-x<3 && m-y<3)
    {
        x=n-x;
        y=m-y;
    }
    if(x<3 && y<3)
    {
        int nx=2-x;
        int ny=2-y;
        ll tot=0;
        tot+=C(n-x,m+n-x-y-3)*rt[nx][ny];
        tot+=C(n-x-3,m+n-x-y-3)*dw[nx][ny];
        cout<<tot;
        return 0;
    }
    ll tot=C(n,n+m);
    for(int i=-2;i<=2;i++)
        tot-=C(x-i,x+y)*C(n-x+i,n+m-x-y);
    tot+=C(x-3,x+y-1)*C(n-x+2,n+m-x-y-1);
    tot+=C(x+2,x+y-1)*C(n-x-3,n+m-x-y-1);
    tot+=C(x,x+y-3)*C(n-x-3,n+m-x-y-3);
    tot+=C(x-3,x+y-3)*C(n-x,n+m-x-y-3);
    cout<<tot;
    return 0;
}
@fzx纯数孤傲 2020-08-24 20:11 回复 举报

你们只要亲测一下第4个数据文件:20 20 4 0就会知道,这玩意用int根本做不了啊!!!!

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



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