题意:
求序列中有几种不同的最长下降子序列
思路:
先求最长下降子序列 记录dis[i]
设到i处的不同种类的最长下降子序列为dp[i] 可知 dp[i] = sum( dp[j] ) 这里j表示i前的一个坐标
且满足num[j]>num[i]和dis[i]=dis[j]+1
易知选出的num[j]是不会递减的(如果递减那么它们的dis不会相同,因为形成了递减序列)
不仅如此 这些num[j]一定是递增的 因为相同的两个num 靠后的所形成的答案一定不会比靠前的少
代码:
for(i=1;i<=n;i++)
{
if(dis[i]==1)
{
dp[i]=1;
continue;
}
for(j=i-1,las=10000;j>=1;j--)
{
if(dis[i]==dis[j]+1&&num[i]<num[j]&&num[j]<las)
{
las=num[j];
dp[i]+=dp[j];
}
}
}