luogu P1002 過河卒
阿新 • • 發佈:2017-05-15
for clas tro ret iostream article 表示 格式 strong
題目描述
棋盤上A點有一個過河卒,需要走到目標B點。卒行走的規則:可以向下、或者向右。同時在棋盤上C點有一個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為“馬攔過河卒”。
棋盤用坐標表示,A點(0, 0)、B點(n, m)(n, m為不超過20的整數),同樣馬的位置坐標是需要給出的。
現在要求你計算出卒從A點能夠到達B點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入輸出格式
輸入格式:一行四個數據,分別表示B點坐標和馬的坐標。
輸出格式:一個數據,表示所有的路徑條數。
輸入輸出樣例
輸入樣例#1:6 6 3 3輸出樣例#1:
6
說明
結果可能很大!
最基礎的dp
1 #include<iostream> 2 using namespace std; 3 const int N=120; 4 int t=10; 5 long long dp[N][N],b[N][N],hor[N][N],n,m,x,y; 6 int main() 7 { 8 cin>>n>>m>>x>>y; 9 hor[x+t][y+t]=1; 10 hor[x-2+t][y+1+t]=1; 11 hor[x+2+t][y+1+t]=1; 12 hor[x-1+t][y+2+t]=1; 13 hor[x+1+t][y+2+t]=1; 14 hor[x-2+t][y-1+t]=1; 15 hor[x+2+t][y-1+t]=1; 16 hor[x-1+t][y-2+t]=1; 17 hor[x+1+t][y-2+t]=1; 18 dp[t][t-1]=1; 19 for(int i=t;i<=n+t;i++) 20 {21 for(int j=t;j<=m+t;j++) 22 { 23 if(hor[i][j]!=1) 24 dp[i][j]=dp[i-1][j]+dp[i][j-1]; 25 } 26 } 27 cout<<dp[t+n][t+m]; 28 return 0; 29 }
luogu P1002 過河卒