25分求助
查看原帖
25分求助
1007287
a1111_xh1215楼主2023/11/19 21:54
#include<bits/stdc++.h>
using namespace std;
long long dp[100001],x[1000001];
int c[100001];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>x[i];
		}
		long long ma=INT_MIN;
		for(int i=2;i<=n;i++)
		{
			dp[i]=1;
			for(int j=1;j<i;j++)
			{
				if(x[i]>x[j])
				{
					dp[i]=max(dp[i],dp[j]+1);
				}
				ma=max(ma,dp[i]);
			}
		}
		c[1]=1;
		for(int i=2;i<=n;i++)
		{
			for(int j=1;j<i;j++)
			{
				if(dp[j]+1==dp[i]&&x[j]<=x[i])
				{
					c[i]+=c[j];
				}
				if(c[i]==0)
				{
					c[i]=1;
				}
			}
		}
		int tnt=0;
		for(int i=1;i<=n;i++)
		{
			if(dp[i]==ma)
			{
				tnt+=c[i];
			}
		}
		cout<<ma<<" "<<tnt<<endl;
		memset(c,0,sizeof(c));
		memset(dp,0,sizeof(dp));
		memset(x,0,sizeof(x));
	}
	return 0;
}
2023/11/19 21:54
加载中...