解题报告:
1、subproblems:
2、A(n) = A(n-2) + 2 * B(n-1)
3、B(n) = A(n-1) + D(n-1)
4、D(n) = B(n-1)
4、由此可得:
A(n) = A(n-2) + 2 * B(n-1)
A(n) = 3*A(n-2) + 2 * B(n-3)
A(n) = 3*A(n-2) + 2 * A(n-4) + 2 * B(n-5)
...
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int i, j, n, tmp, buf[31];
memset(buf, 0, sizeof(buf));
buf[0] = 1;
buf[2] = 3;
for(i = 4; i <= 30; i += 2)
{
tmp = 3 * buf[i-2];
for(j = 4; j <= i; j += 2)
tmp += 2 * buf[i-j];
buf[i] = tmp;
}
while(cin >> n && n != -1)
cout << buf[n] << endl;
return 0;
}
本文介绍了一种解决特定递归数列问题的算法,通过定义子问题并利用动态规划的思想来高效地计算数列的第n项值。算法采用C++实现,并通过实例展示了如何初始化缓冲区、迭代计算直至得出最终结果。
1759

被折叠的 条评论
为什么被折叠?



