资深光能
#include<iostream>
using namespace std;
int n;
int a[1001],b[1001],count;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>b[i];
for(int i=1;i<=n;i++)a[i]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(b[i]>b[j])
{
a[i]=a[j]+1;
}
}
}
int maxv=0;
for(int i=1;i<=n;i++)
{
maxv=max(maxv,a[i]);
}
for(int i=1;i<=n;i++)
{
//if(maxv==a[i])count++;
cout<<a[i]<<" ";
}
cout<<maxv<<" "<<count<<endl;;
return 0;
}
初级光能
f[n]=1;
b[n]=1;
maxlen=1;
for(int i=n-1;i>=1;i--)
{
int last=0;
f[i]=1;
b[i]=1;
for(int j=i+1;j<=n;j++)
{ if(a[i]>a[j])
{
if(f[j]+1>f[i])
{
f[i]=f[j]+1;
b[i]=b[j];
last=j;
}
else if(f[j]+1==f[i]&&a[last]!=a[j])
{
b[i]+=b[j];
last=j;
}
}
}
if(f[i]>maxlen)
maxlen=f[i];
}
int last=0;
for(int i=1;i<=n;i++)
{
if(f[i]==maxlen&&a[i]!=a[last])
{
maxcount+=b[i];
last=i;
}
}