骑士游历 - 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 }
View Code

 

posted @ 2018-07-25 14:56  liubilan  阅读(154)  评论(0编辑  收藏  举报