70分求助!
查看原帖
70分求助!
192374
wenkaijie楼主2020/9/18 22:50
# include <cstdio>
# include <iostream>
# include <algorithm>
# include <cstring>
using namespace std;
long long f[5001];
int num[5001][100];
long long a[5001],Ans;
int zero[2]={1,0},wc[100],ans[100]={1,0};
void add(int a[], int b[], int c[])
{
    int lena=a[0],lenb=b[0];
    int lenc=max(lena, lenb);
    int tmp=0;
    for(int i=1;i<=lenc;i++)
    {
        c[i]=a[i]+b[i]+tmp;
        tmp=c[i]/10;
        c[i]%=10;
    }
    if (tmp>0)
    {
        lenc++;
        c[lenc]=tmp;
    }
    c[0]=lenc;
}
int main()
{
	int n;
	cin>>n;
	a[0]=9223372036854775807;
	f[0]=0;
	num[0][0]=1;
	num[0][1]=1;
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(a[i]<a[j])
			{
				if(f[i]<f[j]+1)
				{
					f[i]=f[j]+1;
					add(num[j],zero,num[i]);
				}
				else if(f[i]==f[j]+1)
				{
                    memset(wc,0,sizeof wc);
                    wc[0]=1;
					add(num[j],num[i],wc);
					add(wc,zero,num[i]);
				}
			}
			else if(a[i]==a[j])
			{
				f[j]=0;
				num[j][0]=1;
				num[j][1]=0;
			}
		}
		Ans=max(Ans,f[i]);
	}
	for(int i=1;i<=n;i++)
		if(f[i]==Ans)
		{
            memset(wc,0,sizeof wc);
            wc[0]=1;
			add(ans,num[i],wc);
			add(wc,zero,ans);
		}
	cout<<Ans<<" ";
	for(int i=ans[0];i>=1;i--)
		printf("%d",ans[i]);
	return 0;
}
2020/9/18 22:50
加载中...