翻译
思路
- 首先,我们走i步,可以到达 ceil ( i / 2 ) * 4 个以前从未到达的点,模拟前几个样例即可发现规律
- 然后其他点分奇偶考虑,对于奇数,我们可以用3步代替1步,但是方向会改变,所以奇数还可以到达i-2步的点;对于偶数,我们可以用4步代替0步走,并且没有方向限制,所以偶数还可以到达i-4步的点
- 根据分析我们就可以推出状态转移方程 奇数:dp[i] = dp[i - 2] + 4 * (i + 1) / 2; 偶数 :dp[i] = dp[i - 4] + 4 * i / 2
AC代码
#include<bits/stdc++.h>
using namespace std;
int dp[1010];
int main() {
int n;
cin >> n;
dp[0] = 1;
dp[1] = dp[2] = 4;
if (n & 1)
for (int i = 3; i <= n; i += 2)
dp[i] = dp[i - 2] + 4 * (i + 1) / 2;
else
for (int i = 4; i <= n; i += 2)
dp[i] = dp[i - 4] + 4 * i / 2;
cout << dp[n];
return 0;
}