# 建议降绿
查看原帖
# 建议降绿
1051244
114514lhc楼主2024/5/4 15:55
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct M{int a,b;double c;};
int n,a[N],f[N],s[N],l[N],x,y;
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=n;i>=1;i--)
    {
        f[i]=1;s[i]=0;
        for(int j=i+1;j<=n;j++)
            if(a[i]>a[j])
            f[i]=max(f[i],f[j]+1);//最大值

        for(int j=i+1;j<=n;j++)
            if(a[i]>a[j]&&f[j]==f[i]-1&&l[a[j]]!=i)
                s[i]+=s[j],l[a[j]]=i;//l数组去重,s数组记录方法数

        if(!s[i])s[i]=1;
    }
    for(int i=1;i<=n;i++)if(f[i]>x)x=f[i];
    for(int i=1;i<=n;i++)if(f[i]==x&&l[a[i]]!=n+1)y+=s[i],l[a[i]]=n+1;
    cout<<x<<' '<<y;
    return 0;
}

2024/5/4 15:55
加载中...