Skip to main content

动态规划基础

参考资料

最长上升子序列

最长上升子序列(Longest Increasing Subsequence,LIS)指找到给定序列的一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能大。

120 Bcpp
for(int i=1;i<=n;i++)
{
f[i]=1;
for(int j=1;j<i;j++)
{
if(a[j]<a[i])f[i]=max(f[i],f[j]+1);
}
ans=max(ans,f[i]);
}

例题

给定一个长度为 nn 的正整数序列 aia_i,求最长上升子序列的长度。(n5000,ai106n\le5000,a_i\le10^6

给定一个 rr 行的数字三角形(r1000r \leq 1000),需要找到一条从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到当前点左下方的点或右下方的点。在下面这个示例中,最优路径是 738757 \to 3 \to 8 \to 7 \to 5

69 Btext
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

AABB 是两个字符串。我们要用最少的字符操作次数,将字符串 AA 转换为字符串 BB。这里所说的字符操作共有三种:

  1. 删除一个字符;
  2. 插入一个字符;
  3. 将一个字符改为另一个字符。