唉不是,搞啥鬼ans啊?
by Mr_Terminator @ 2022-01-19 15:54:50
@[Tis员工](/user/430920) ans求得值有问题,题目问的是有多少种购买法子!
by Mr_Terminator @ 2022-01-19 15:55:32
那不然我一走怎么算(小声bb
by Tis员工 @ 2022-01-20 09:08:11
题目要求是“它们构成的价格队列不一样”,那么我准备拿一个数组存下这个最长下降子序列,但是这不现实,检查是否匹配是在最坏的情况下可能达到$O(N^3)$
by wstjy @ 2022-12-15 20:09:20
所以代码就来了
------------
```cpp
#include<cstdio>
#include<cstring>
int max(int x,int y){return x>y?x:y;}
int a[5001],f[5001],t[5001];
int main()
{
memset(f,0,sizeof(f));
memset(t,0,sizeof(t));//初始化方案
int n,maxx=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
if(a[i]<a[j])//延长已经存在的最长下降子序列
f[i]=max(f[i],f[j]+1);
if(f[i]==0)
f[i]++;
if(f[i]>maxx)
maxx=f[i];
for(int j=1;j<i;j++)
if(f[i]==f[j]&&a[i]==a[j])
t[j]=0;
else if(f[i]==f[j]+1&&a[i]<a[j])
t[i]+=t[j];
if(!t[i])
t[i]=1;
}
int sum=0;
for(int i=1;i<=n;i++)
if(f[i]==maxx)
sum+=t[i];
printf("%d %d",maxx,sum);
return 0;
}
by wstjy @ 2022-12-15 20:10:40