蓝桥杯 序列计数
序列计数
原题目链接
题目描述
小明想知道,满足以下条件的正整数序列的数量:
- 第一项为
n
; - 第二项不超过
n
; - 从第三项开始,每一项小于前两项的差的绝对值。
请计算,对于给定的 n
,有多少种满足条件的序列。
输入描述
输入一行包含一个整数 n
(1 ≤ n ≤ 1000)
输出描述
输出一个整数,表示答案。答案可能很大,请输出答案除以 10⁴
的余数。
输入输出样例
输入
4
输出
7
样例说明
以下是满足条件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
c++代码
#include<bits/stdc++.h>using namespace std;int ans = 0, n;
vector<vector<int>> mp(1000, vector<int>(1000, 0));int dfs(int a, int b) {if (mp[a][b] != 0) return mp[a][b];int k = abs(a - b), res = 1;if (k <= 1) {mp[a][b] = 1;return 1;}for (int i = 1; i < k; i++) res += dfs(b, i), res %= 10000;mp[a][b] = res;return res;
}int main() {cin >> n;for (int i = 1; i <= n; i++) ans += dfs(n, i), ans %= 10000;cout << ans;return 0;
}//by wqs
题目解析
如果已知前两个数,后面的状态数量都是一样的,我们为了不超时,不能重复计算,所以我们只算一次后把结果存储下来,下次再次递归到这两个数直接查表就行。