0
已解决
1526 最长的降序序列 怎么求最长序列的种类数?

1
已采纳
我是用一个数组来记录后面有多少个最优解最后再相加。
for(int i=n-1; i>=1; i--)
{
memset(c,0,sizeof(c));
int s=1;
for(int j=i+1; j<=n; j++)
{
if(a[j]<a[i]&&f[j]+1>=s)
{
s=f[j]+1;
}
}
f[i]=s;
if(f[i]==1) b[i]=1;
if(f[i]>max1) max1=f[i];
for(int j=1; j<=n; j++)//判断后面有多少个最优解,用b数组。
{
if(f[j]==f[i]-1&&a[i]>a[j]&&c[a[j]]==0)
{
b[i]+=b[j];
c[a[j]]=1;
}
}
}
memset(c,0,sizeof(c));
for(int i=1; i<=n; i++)
{
if(f[i]==max1&&c[a[i]]==0) ans+=b[i];
c[a[i]]=1;
}
int k=0;
for(int i=2; i<=n; i++)
if(a[i]>=a[i-1]) k++;
if(k==n-1)
cout<<"1"<<' '<<n;//这里要来个特判,否则只能得90分
else
cout<<max1<<' '<<ans<<endl;
0
