采用动态的规划思想。利用动态规划的分层,以及对问题子集解的记住,从而采用动归的思想。。伪代码实现的关键步骤是
for j=1,2,……n;
l[j]=1+max(l[i]:(i,j)属于E)
return maxl[j];
对于dag图,我们有对于i<j,等增子序列有l[i]<l[j];所以,也就是利用归约的思想变成了寻找dag图的最长路径;
代码
memset(b,1,sizeof(b));
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
if(a[j]<a[i]&&b[i]<b[j])
{
b[i]=b[j]+1;
max=b[i];
}
}
return max;
同时求递减等只需改变a[i]与a[j]的关系就可以。。