DP函数优化
这种优化方式不难理解,不难想象,之前做过的一道题中记录了这种做法,通常用来优化线性DP,最长上升子序列
设
注意如果a[i]<a[j]并且d[i]=d[j]那么对于后续状态k(k>i&&k>j)来说,i不会比j差,所以我们只需要保留i这个状态,一定不会损失最优解
因此对于相同的d,只需要保留a[i]就好了
所以可以用lower_bound函数进行优化
这样的结果只能求长度,很难输出具体的序列,但是能完成动态规划
int main()
{
memset(g.0x3f,sizeof(g));
for(int i=1;i<=n;i++)
{
int k=lower_bound(g+1,g+1+n,a[i])-g;
d[i]=k;
g[k]=a[i];
ans=max(ans,d[i]);
}
}
本文介绍了如何使用动态规划(DP)优化算法来解决最长上升子序列问题。通过利用lower_bound函数,当遇到相同贡献值时,只保留较小的元素,从而减少状态空间,提高效率。虽然这种方法难以直接获取具体序列,但能够有效地计算出序列的长度。在实际应用中,这种优化技巧可以显著提升DP解法的速度。
641

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



