算法分析
线性dp
状态表示
表示以
结尾的最长上升子序列的长度为
状态转移
//mp[i] 表示以 i 结尾的最长等差序列长度
for(int i = 1;i <= n;i ++)
{
int pre = a[i] - 1;
if(mp.count(pre))
mp[a[i]] = mp[pre] + 1;
else
mp[a[i]] = 1;
mmax = max(mmax,mp[a[i]]);
}
那么由于限定了公差为 如果要发生变化
那么答案一定是从 转移而来的
因此维护一个最大长度即可
然后要输出方案的话,已经最大长度时对应的 ,那么就是输出