1. 案例提出
给定一个由n个正整数组成的序列,从该序列中删除若干个整数,使剩下的整数组成非降子序列,求最长的非降子序列。
例如,由12个正整数组成的序列为:
48,16,45,47,52,46,36,28,46,69,14,42
请在序列中删除若干项,使剩下的项为非降(即后面的项不小于后面的项)序列,剩下的非降序列最长为多少项?
2.递推实现动态规划设计
设序列的各项为a[1],a[2],…,a[n](可随机产生,也可从键盘依次输入),对每一个整数操作为一个阶段,共为n个阶段。
(1)建立递推关系
设置b数组,b[i]表示序列的第i个数(保留第i个数)到第n个数中的最长非降子序列的长度,i=1,2,…,n。对所有的j>i,比较当a[j]≥a[i]时的b[j]的最大值,显然b[i]为这一最大值加1,表示加上a[i]本身这一项。
因而有递推关系:
b[i]=max(b[j])+1 (a[j]≥a[i],1≤i<j≤n)
边界条件:b[n]=1
(2)逆推计算最优值
b[n]=1;
for(i=n−1;i>=1;i−−)
{max=0;for(j=i+1;j<=n;j++)
if(a[i]<=a