#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
int dp[10000];
int d[10000];
int num[10000];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&d[i]);
num[i]=1;
dp[i]=1;
}
int len=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(d[j]>d[i])
{
if(dp[j]+1>dp[i])
{
dp[i]=dp[j]+1;
num[i]=num[j];
}
else
if(dp[j]+1==dp[i])
{
num[i]+=num[j];
}
}
else
if(d[i]==d[j])
{
num[j]=0;
}
}
len=MAX(len,dp[i]);
}
int res=0;
for(int i=0;i<n;i++)
if(dp[i]==len)
res+=num[i];
printf("%d %d\n",len,res);
return 0;
}
poj 1952 最长子序列 计数加去重
最新推荐文章于 2022-09-13 21:23:13 发布