记录编号 |
607117 |
评测结果 |
AAAAAAAAAA |
题目名称 |
4180.毛二琛 |
最终得分 |
100 |
用户昵称 |
wdsjl |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.711 s |
提交时间 |
2025-10-05 17:15:56 |
内存使用 |
72.75 MiB |
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5010;
const int mod = 1e9+7;
int n,mx,id;
int p[N],cmp[N];
int f[N][N],sum[N][N];
int ans;
signed main(){
freopen("swap.in","r",stdin);
freopen("swap.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
p[i]++;
}
int r=n-1;
while(r>=1){
mx=0;
for(int i=1;i<=r;i++){
if(mx<p[i]){
mx=p[i];
id=i;
}
}
for(int i=id;i<=r-1;i++){
cmp[i]=1;
}
cmp[id-1]=0;
if(mx>p[r+1])cmp[r]=1;
r=id-2;
}
f[1][1]=sum[1][1]=1;
for(int i=2;i<=n-1;i++){
for(int j=1;j<=i;j++){
if(cmp[i-1]==1){
f[i][j]=(sum[i-1][i-1]-sum[i-1][j-1]+mod)%mod;
}else{
f[i][j]=sum[i-1][j-1];
}
}
for(int j=1;j<=i;j++){
sum[i][j]=(sum[i][j-1]+f[i][j])%mod;
}
}
cout<<sum[n-1][n-1]<<endl;
return 0;
}