C++,打简单dp时的小bug求助
查看原帖
C++,打简单dp时的小bug求助
227756
阿祖卡布珈德楼主2021/2/17 10:30

这题思路挺简单的,但是WA了两点。。。下载下来发现居然是负数。。。可是没看出哪越界了啊。。。

#include<bits/stdc++.h>
#define maxn 21

using namespace std;

int n,m,hx,hy;//horse_x/y
bool horse[maxn][maxn];
unsigned long long dp[maxn][maxn];

signed main()
{
	scanf("%d%d%d%d",&n,&m,&hx,&hy);
	n+=1;m+=1;hx+=1;hy+=1;
	horse[hx-2][hy-1]=horse[hx-1][hy-2]=horse[hx+1][hy-2]=
	horse[hx+2][hy-1]=horse[hx+2][hy+1]=horse[hx+1][hy+2]=
	horse[hx-1][hy+2]=horse[hx-2][hy+1]=horse[hx][hy]=1;
	
	dp[1][1]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(horse[i][j]) continue;
			if(dp[i-1][j])
			{
				dp[i][j]+=dp[i-1][j];
			}
			if(dp[i][j-1])
			{
				dp[i][j]+=dp[i][j-1];
			}
		}
	}
	
	#if 0
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<dp[i][j]<<" ";
		}
		cout<<endl;
	}
	#endif
	
	printf("%lld\n",dp[n][m]);
	return 0;
}
2021/2/17 10:30
加载中...