P1002 过河卒(dp)
题目链接:https://www.luogu.com.cn/problem/P1002
题意:
棋盘上,卒从(0,0)只能向右或下走,不能走马所在和马控制的点,问到某一点的方案数。
思路:
标记不可访问的九个点后逐行递推:$dp[i][j]=dp[i-1][j]+dp[i][j-1]$。
#include <bits/stdc++.h> using namespace std; const int M=30; long long dp[M][M]; int dir[8][2]={{-2,1},{-1,2},{1,2},{2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}}; int main() { int a,b,c,d;cin>>a>>b>>c>>d; dp[c][d]=-1; for(int i=0;i<8;i++){ int x=c+dir[i][0],y=d+dir[i][1]; if(x>=0&&x<=20&&y>=0&&y<=20) dp[x][y]=-1; } dp[0][0]=1; for(int i=0;i<=20;i++) for(int j=0;j<=20;j++) if(dp[i][j]!=-1){ if(i-1>=0&&dp[i-1][j]!=-1) dp[i][j]+=dp[i-1][j]; if(j-1>=0&&dp[i][j-1]!=-1) dp[i][j]+=dp[i][j-1]; } cout<<dp[a][b]; return 0; }

浙公网安备 33010602011771号