这个是关于60分的小问题
查看原帖
这个是关于60分的小问题
312780
456laji楼主2020/5/15 17:11

代码丑陋,见谅。

我一直是60分,我看了题解后,都要加上2,我知道是为了防止出现负数下标。但是我认为不加也是可以的,只要在标记马的下标时特判一下就好了。

可是,还是错的。我觉得不加2也是可以的呢。求助大佬们,你们认为呢?

#include<bits/stdc++.h>
using namespace std;
const int N=100;
int ds[][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,2},{1,-2},{2,1},{2,-1}};
int d[][2]={{-1,0},{0,-1}};
long long mp[N][N],dp[N][N];

int main()
{
	int n,m,px,py;
	cin>>n>>m>>px>>py;
	
	for(int i=0;i<=n;i++)
		dp[i][0]=1;
	for(int i=0;i<=m;i++)
		dp[0][i]=1;
	
	mp[px][py]=1,dp[px][py]=0;
	for(int i=0;i<8;i++)
	{
		int tx=px+ds[i][0];
		int ty=py+ds[i][1];
		if(tx>=1&&tx<=n&&ty>=1&&ty<=m)
			mp[tx][ty]=1,dp[tx][ty]=0;
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(!mp[i][j]) 
			{
				dp[i][j]=max(dp[i][j],dp[i-1][j]+dp[i][j-1]);
			}
		}
	}
	printf("%lld\n",dp[n][m]);
	return 0;
}

2020/5/15 17:11
加载中...