1 #include <bits/stdc++.h>
2 using namespace std;
3 const int maxn=5010,INF=-(1<<30);
4 int n,a[maxn],d[maxn],f[maxn];
5 int main(){
6 cin>>n;
7 for(int i=1;i<=n;i++)
8 cin>>a[i];
9 a[n+1]=INF;
10 for(int i=1;i<=n+1;i++){
11 //求最优解
12 f[i]=1;
13 for(int j=1;j<i;j++)
14 if(a[j]>a[i]&&f[j]+1>f[i])
15 f[i]=f[j]+1;
16 //求最优解的方案数
17 //d[i]用于记录方案数
18 if(f[i]==1)
19 d[i]=1;
20 for(int j=1;j<i;j++)
21 if(a[j]>a[i]&&f[j]+1==f[i])
22 d[i]+=d[j];//计算方案总数肯定是累加的
23 else if(a[j]==a[i]&&f[j]==f[i])//两个数相同,本来算出的方案数应该是一样多
24 d[j]=0;//题目中不让重复,所以这个给它置为0
25 }
26 cout<<f[n+1]-1<<' '<<d[n+1]<<endl;
27 return 0;
28 }