这是一道动态规划题
第一眼以为是搜索题,做了半天
要点在于结果数字非常大要用unsigned long long存储
其次是要注意数组越界的情况
我的代码中对坐标进行 +=2 处理,来避免数组越界
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int fx[] = { 0,-2,-1,1,2,2,1,-1,-2 };
int fy[] = { 0,1,2,2,1,-1,-2,-2,-1 };
unsigned long long int dp[30][30];
int s[30][30];
int main()
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
x1 += 2, x2 += 2, y1 += 2, y2 += 2;
dp[2][2] = 1;
s[x2][y2] = 1;
for (int i = 0; i < 9; i++)
{
s[x2 + fx[i]][y2 + fy[i]] = 1;
}
for (int i = 2; i <= x1; i++)
{
for (int j = 2; j <= y1; j++)
{
if (s[i][j] == 1)
continue;
dp[i][j] = max(dp[i - 1][j] + dp[i][j - 1], dp[i][j]);
}
}
cout << dp[x1][y1] << endl;
system("pause");
return 0;
}
本题还可以对空间进行优化,如利用滚动数组等。