问题标题: 1526 最长的降序序列 怎么求种类数?

0
0

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
我要回答