洛谷 - P1002 - 过河卒 - 简单dp

时间:2023-03-09 20:35:49
洛谷 - P1002 - 过河卒 - 简单dp

https://www.luogu.org/problemnew/show/P1002

方程很好想,题目也很暴力。感谢题目提示数据会很大。

#include<bits/stdc++.h>
using namespace std;
#define ll long long ll cannotuse[][];
ll dp[][];
int bi,bj,ki,kj; void set_false(int i,int j){
if(i<||i>bi||j<||j>bj)
return;
cannotuse[i][j]=;
} void solve(){
if(cannotuse[][])
return;
dp[][]=; for(int i=;i<=bi;i++){
for(int j=;j<=bj;j++){
if(cannotuse[i][j])
continue;
else{
if(i->=&&cannotuse[i-][j]==)
dp[i][j]+=dp[i-][j];
if(j->=&&cannotuse[i][j-]==)
dp[i][j]+=dp[i][j-];
}
}
}
} int main(){
scanf("%d%d",&bi,&bj);
scanf("%d%d",&ki,&kj);
set_false(ki,kj);
set_false(ki+,kj-);
set_false(ki+,kj-);
set_false(ki-,kj-);
set_false(ki-,kj-);
set_false(ki-,kj+);
set_false(ki-,kj+);
set_false(ki+,kj+);
set_false(ki+,kj+);
solve();
printf("%lld\n",max(0ll,dp[bi][bj]));
}