线性dp-计数类题目9(斐波那契字符串)

题目链接

解题思路

题目中的字符串有0和1组成,要构成逆序对,1要在0前面。

根据题意:

  • S 1 = 0 S1=0 S1=0
  • S 2 = 0 S2=0 S2=0
  • 对于任意正整数 n ( n ≥ 3 ) , S n = S n − 2 + S n − 1 n(n≥3),Sn=Sn−2+Sn−1 n(n≥3),Sn=Sn−2+Sn−1(" + + +"表示字符串拼接)。

如果我们知道 S n − 2 Sn-2 Sn−2和 S n − 1 Sn-1 Sn−1中的分别有多少个逆序对,有知道 S n − 2 Sn-2 Sn−2中有多少个1, S n − 1 Sn-1 Sn−1中有多少个0,那么我们就可以知道 S n Sn Sn中有多少个逆序对。

于是我们定义 d p i 0 dpi0 dpi0表示 S i Si Si中0的个数, d p i 1 dpi1 dpi1表示 S i Si Si中1的个数。再定义 f i fi fi为 S i Si Si的逆序对个数,我们可以得到以下状态转移方程:

i = 1 , d p i 0 = 1 , d p i 1 = 0 , f i = 0 i=1,dpi0=1,dpi1=0,fi=0 i=1,dpi0=1,dpi1=0,fi=0

i = 2 , d p i 0 = 0 , d p i 1 = 1 , f i = 0 i=2,dpi0=0,dpi1=1,fi=0 i=2,dpi0=0,dpi1=1,fi=0

i > = 3 时 , d p i 0 = d p i − 2 0 + d p i − 1 0 , d p i 1 = d p i − 2 1 + d p i − 1 1 , f i = f i − 2 + f i − 1 + d p i − 2 1 ∗ d p i − 1 0 . i>=3时,dpi0=dpi-20+dpi-10,dpi1=dpi-21+dpi-11,fi=fi-2+fi-1+dpi-21*dpi-10. i>=3时,dpi0=dpi−20+dpi−10,dpi1=dpi−21+dpi−11,fi=fi−2+fi−1+dpi−21∗dpi−10.

(注意:要对结果取模)

AC代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7, maxn = 1e5 + 5;
int t, dp[maxn][2], f[maxn], n;
void init() {
	dp[1][0] = 1;
	dp[2][1] = 1;
	for (int i = 3; i <= 100000; i++) {
		dp[i][0] = (dp[i - 1][0] + dp[i - 2][0]) % mod;
		dp[i][1] = (dp[i - 1][1] + dp[i - 2][1]) % mod;
		f[i] = (dp[i - 1][0] * dp[i - 2][1] % mod + f[i - 1] + f[i - 2]) % mod;
	}
}
signed main() {
	cin >> t;
	init();
	while (t--) {
		cin >> n;
		cout << f[n] << endl;
	}
	return 0;
}
相关推荐
DuHz4 分钟前
论文解读:用于数据分析的极值点对称模态分解方法 (Extreme-point Symmetric Mode Decomposition,ESMD)
论文阅读·算法·信息与通信·信号处理
HZZD_HZZD23 分钟前
用电负荷聚类分析实战:基于`scikit-learn`的`K-Means`与`DBSCAN`双算法对比、`PCA`降维可视化与智能电表负荷画像全流程
算法·scikit-learn·kmeans
MIngYaaa52036 分钟前
2026暑期牛客多校1 2026-7-17
数据结构·算法
wabs66637 分钟前
关于图论【卡码网107.寻找存在的路线的思考】
数据结构·算法·图论
半兽先生1 小时前
大模型技术开发与应用——4.大模型提示词工程实战
人工智能·算法
wuminyu1 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法
hhzz2 小时前
机器学习-算法模型系列文章:07-SVM 一巴掌拍出来的超平面:SVM核函数选错,再干净的数据也救不了你
算法·机器学习·支持向量机
geovindu2 小时前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-34 通讯录的录入与显示(C语言实现)
c语言·开发语言·数据结构·算法
zander2582 小时前
LeetCode 79. 单词搜索
算法·深度优先