0
已解决
樊澄宇
新手光能
新手光能
1526 最长的降序序列 怎么求最长序列的种类数?
1
已采纳
陆麟瑞
资深天翼
资深天翼
我是用一个数组来记录后面有多少个最优解最后再相加。
for(int i=n-1; i>=1; i--) { memset(c,0,sizeof(c)); int s=1; for(int j=i+1; j<=n; j++) { if(a[j]<a[i]&&f[j]+1>=s) { s=f[j]+1; } } f[i]=s; if(f[i]==1) b[i]=1; if(f[i]>max1) max1=f[i]; for(int j=1; j<=n; j++)//判断后面有多少个最优解,用b数组。 { if(f[j]==f[i]-1&&a[i]>a[j]&&c[a[j]]==0) { b[i]+=b[j]; c[a[j]]=1; } } } memset(c,0,sizeof(c)); for(int i=1; i<=n; i++) { if(f[i]==max1&&c[a[i]]==0) ans+=b[i]; c[a[i]]=1; } int k=0; for(int i=2; i<=n; i++) if(a[i]>=a[i-1]) k++; if(k==n-1) cout<<"1"<<' '<<n;//这里要来个特判,否则只能得90分 else cout<<max1<<' '<<ans<<endl;
0