0
已解决
黄子扬
初级天翼
初级天翼
/*
8
389 207 155 300 299 170 158 65
*/
#include<bits/stdc++.h>
using namespace std;
int a[100005],f[100005],i,n,maxn=1,maxnk,sum,k[100005];
void debug()
{
cout<<f[i]<<" ";
}
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
k[1]=1;
f[i]=1;
for(int j=1;j<i;j++)
if(a[i]<a[j])
f[i]=max(f[i],f[j]+1);
for(int j=1;j<i;j++)
if(a[i]<a[j])
{
if(f[j]+1==f[i])
{
k[i]+=k[j];
// cout<<j<<" "<<k[j]<<endl;
}
}
//debug();
if(f[i]>=maxn)
{
maxn=f[i];
}
}
for(int i=1;i<=n;i++)
if(f[i]==maxn)
maxnk+=k[i];
// cout<<k[6]<<" "<<k[8]<<endl;
cout<<maxn<<" "<<maxnk<<endl;
return 0;
}
10分,debug许久过了样例,然后挂了九个点
黄子扬在2020-08-01 09:49:09追加了内容
@赵逸凡 大佬看下
0
已采纳
赵逸凡
初级启示者
初级启示者
@黄子扬
maxn的输出应该没有问题,maxnk的运算有些看不懂 /kel
对于maxnk,我有个简便思路:
先遍历找到maxn,再遍历一遍找到与maxn相等的f[i],此时ans++
显然有bug,如果f[i]本身的取值很多就会被hack掉,而且这道题空间、时间卡的特别细,N<=5000
PS:输出结果可以改成maxn和ans,这样看起来更直观
0
0