2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=5100; typedef long long LL; int a[N],f[N]; double d[N]; int main() { int n;scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d", &a[i]);a[++n]=-1; memset(f,0,sizeof(f));memset(d,0,sizeof(d)); for(int i=1;i<=n;i++) { d[i]=f[i]=1; map<int,bool>mp; for(int j=i-1;j>=1;j--)if(a[j]>a[i]) { if( f[j]+1>f[i] ) { f[i]=f[j]+1; d[i]=d[j]; mp.clear();mp[a[j]]=1; } else if( f[j]+1==f[i] && !mp[a[j]] ) { d[i]+=d[j]; mp[a[j]]=1; } } } printf("%d %.0lf\n", f[n]-1,d[n]); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=5100; typedef long long LL; int a[N],f[N]; double d[N]; int main() { int n;scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d", &a[i]);a[++n]=-1; memset(f,0,sizeof(f));memset(d,0,sizeof(d)); for(int i=1;i<=n;i++) { d[i]=f[i]=1; map<int,bool>mp; for(int j=i-1;j>=1;j--)if(a[j]>a[i]) { if( f[j]+1>f[i] ) { f[i]=f[j]+1; d[i]=d[j]; mp.clear();mp[a[j]]=1; } else if( f[j]+1==f[i] && !mp[a[j]] ) { d[i]+=d[j]; mp[a[j]]=1; } } } printf("%d %.0lf\n", f[n]-1,d[n]); return 0; }
- 1
信息
- ID
- 1400
- 时间
- 1000ms
- 内存
- 30MiB
- 难度
- 6
- 标签
- 递交数
- 162
- 已通过
- 50
- 上传者