记录编号 607131 评测结果 AAAAAAAAAA
题目名称 4180.毛二琛 最终得分 100
用户昵称 Gravatar梦那边的美好TT 是否通过 通过
代码语言 C++ 运行时间 0.789 s
提交时间 2025-10-05 17:29:50 内存使用 72.71 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
#define N 5001
using namespace std;
const int MOD=1e9+7;
int n,a[N];
bool c[N];
ll dp[N][N],g[N][N],ans;
int main(){
    freopen("swap.in","r",stdin);
    freopen("swap.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n;
    for(int i=0;i<n;++i) cin>>a[i];
    for(int i=0;i<n;++i){
        if(i<a[i]){
            c[i-1]=true;
            c[a[i]-1]=true;
        }else for(int j=a[i];j<i-1;++j) c[j]=true; 
    }
    dp[0][1]=g[0][1]=1;
    for(int i=1;i<n-1;++i)
    for(int j=1;j<=i+1;++j){
        if(c[i-1]) dp[i][j]=(dp[i][j]+g[i-1][i]-g[i-1][j-1]+MOD)%MOD;
        else dp[i][j]=(dp[i][j]+g[i-1][j-1])%MOD;
        g[i][j]=(g[i][j-1]+dp[i][j])%MOD;
    }
    for(int i=1;i<n;++i) ans=(ans+dp[n-2][i])%MOD;
    cout<<ans<<'\n';
    return 0;
}