为什么开了long long 还是测试点1和5还是不对啊,大家帮忙看看
查看原帖
为什么开了long long 还是测试点1和5还是不对啊,大家帮忙看看
668320
fufuQAQ楼主2022/4/4 20:50
cpp
#include<bits/stdc++.h>
//因为这个题目的卒是在格子的交点上走的,所以从(0,0)到(1,1)
//实际上是走过了一个2*2的格子 
#define ll long long
using namespace std;
ll int m,n,x,y;
ll int dp[30][30],a[30][30];
int dir[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{-2,1},{2,-1},{-2,-1}};

int main()
{
	cin>>n>>m>>x>>y;
	for(int i=0;i<8;i++)
	{
		int xx=dir[i][0]+x;
	    int yy=dir[i][1]+y; 
	    a[xx][yy]=-1;
	}
    a[x][y]=-1;
    
//    for(int i=0;i<=m;i++)
//	{
//	   for(int j=0;j<=n;j++)
//	   	    printf("%5d",a[i][j]);
//	   cout<<endl;
//    }
//    cout<<endl;
    
//    dp[0][0]=1;
	for(int i=0;i<=m;i++)
	   for(int j=0;j<=n;j++)
	   {
	   	    if(a[i][j]!=-1)
			{
	   	        if(i==0 && j==0) dp[0][0]=1; 
                else if(i==0)  dp[i][j]=dp[i][j-1];
                else if(j==0)  dp[i][j]=dp[i-1][j];
                else dp[i][j]=dp[i-1][j]+dp[i][j-1];  
            }                
//	   	    if(a[i][j]==-1)  dp[i][j]=0;
//	   	    else if(i==1 || j==1)   dp[i][j]=1;
//	   	    else  dp[i][j]=dp[i-1][j]+dp[i][j-1]; 
//          if((i==0 || j==0) && a[i][j]!=-1 )   dp[i][j]=1;  	       
	   }
	cout<<dp[n][m]<<endl;
	return 0;
} 
2022/4/4 20:50
加载中...