过河卒dp做法AC一个点,求助
查看原帖
过河卒dp做法AC一个点,求助
550974
LucaZSC楼主2022/7/30 09:05

RT

#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;
long long xx,yy,n,m,dp[30][30];
int main(){
	cin>>n>>m>>xx>>yy;
	if((xx+1<=n)&&(yy-2>=0))dp[xx+1][yy-2]=-1;
	if((xx+1<=n)&&(yy+2<=m))dp[xx+1][yy+2]=-1;
	if((xx-1>=0)&&(yy-2>=0))dp[xx-1][yy-2]=-1;
	if((xx-1>=0)&&(yy+2<=m))dp[xx-1][yy+2]=-1;
	if((xx+2<=n)&&(yy-1>=0))dp[xx+2][yy-1]=-1;
	if((xx+2<=n)&&(yy+1<=m))dp[xx+2][yy+1]=-1;
	if((xx-2>=0)&&(yy-1>=0))dp[xx-2][yy-1]=-1;
	if((xx-2>=0)&&(yy+1<=m))dp[xx-2][yy+1]=-1;
	dp[1][1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i==1&&j==1)continue;
			if(dp[i][j]==-1)continue;
			if(dp[i][j-1]==-1&&dp[i-1][j]==-1)dp[i][j]=0;
			else if(dp[i][j-1]==-1)dp[i][j]=dp[i-1][j];
			else if(dp[i-1][j]==-1)dp[i][j]=dp[i][j-1];
			else dp[i][j]=dp[i-1][j]+dp[i][j-1];
		}
	}
	cout<<dp[n][m];
	return 0;
}

20分

本人样例都没过

2022/7/30 09:05
加载中...