洛谷 - P1002 - 过河卒 - 简单dp
https://www.luogu.org/problemnew/show/P1002
方程很好想,题目也很暴力。感谢题目提示数据会很大。
#include<bits/stdc++.h> using namespace std; #define ll long long ll cannotuse[21][21]; ll dp[21][21]; int bi,bj,ki,kj; void set_false(int i,int j){ if(i<0||i>bi||j<0||j>bj) return; cannotuse[i][j]=1; } void solve(){ if(cannotuse[0][0]) return; dp[0][0]=1; for(int i=0;i<=bi;i++){ for(int j=0;j<=bj;j++){ if(cannotuse[i][j]) continue; else{ if(i-1>=0&&cannotuse[i-1][j]==0) dp[i][j]+=dp[i-1][j]; if(j-1>=0&&cannotuse[i][j-1]==0) dp[i][j]+=dp[i][j-1]; } } } } int main(){ scanf("%d%d",&bi,&bj); scanf("%d%d",&ki,&kj); set_false(ki,kj); set_false(ki+2,kj-1); set_false(ki+1,kj-2); set_false(ki-1,kj-2); set_false(ki-2,kj-1); set_false(ki-2,kj+1); set_false(ki-1,kj+2); set_false(ki+1,kj+2); set_false(ki+2,kj+1); solve(); printf("%lld\n",max(0ll,dp[bi][bj])); }