专栏文章

线性 dp 学习

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min20n3g
此快照首次捕获于
2025/12/01 19:16
3 个月前
此快照最后确认于
2025/12/01 19:16
3 个月前
查看原文

P2362 围栏木桩

求每组数据的最长非递减子序列长度 tt 及其方案数 cc

长度是容易的,考虑方案求法。
定义 c[i]:以第 ii 个木桩结尾的、长度为 f[i] 的非递减子序列的方案总数。
初始化:最开始只有一个木桩时,c[1] = 1
转移方程:若 a[j] ≤ a[i]f[j] + 1 = f[i],则 c[i] += c[j]
边界处理:后面如果一个位置 i 没有任何前驱能转移来,即第 i 个木桩前面没有比它低的木桩可以接上,c[1] = 1
这样实现:
CPP
for(int i=2;i<=n;i++)
{
	for(int j=1;j<i;j++)
	{
		if(f[j]+1==f[i] && a[j]<=a[i]) c[i]+=c[j];
	}
	if(c[i]==0) c[i]=1;
}
结果求法:所有 f[i] == ansc[i] 累加得到总方案数 cnt

评论

0 条评论,欢迎与作者交流。

正在加载评论...