骑士游历 - dp
题目地址:http://www.51cpc.com/web/problem.php?id=1586
Summarize:
1. 题目坐标系所给 x,y与惯用表示横纵坐标相反
2. 搜索超时,使用动规;
顺序扫描AC,但反序扫描WA,后续反省;
3. 走“日”字包括横向与竖向;
4. 数据范围爆int;
附顺序动规代码:
1 /* 2 2018-07-25 骑士游历 3 题中给出坐标图,x,y与常规颠倒 4 */ 5 #include<iostream> 6 #include<cstring> 7 using namespace std; 8 #define LL long long 9 10 int n,m; 11 int x1,y1,x2,y2; 12 LL dp[52][52]; 13 14 int main() 15 { 16 ios::sync_with_stdio(false); 17 18 while(cin>>n>>m) 19 { 20 cin>>x1>>y1>>x2>>y2; 21 x1--,y1--,x2--,y2--; 22 23 if(n < 4) { 24 cout<<0<<endl; 25 continue; 26 } 27 28 memset(dp, 0, sizeof(dp)); 29 dp[x1][y1] = 1; 30 for(int i=x1; i<=x2; i++) 31 for(int j=0; j<n; j++) 32 { 33 if(j>=1 && i+2<m) dp[i+2][j-1] += dp[i][j]; 34 if(j+1<n && i+2<m) dp[i+2][j+1] += dp[i][j]; 35 if(j+2<n && i+1<m) dp[i+1][j+2] += dp[i][j]; 36 if(j>=2 && i+1<m) dp[i+1][j-2] += dp[i][j]; 37 } 38 cout<<dp[x2][y2]<<endl; 39 } 40 41 return 0; 42 }