how D
  • 板块学术版
  • 楼主AKPC
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/4/13 00:35
  • 上次更新2024/4/13 10:10:57
查看原帖
how D
540363
AKPC楼主2024/4/13 00:35
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mpr make_pair
#define fr first
#define sc second
inline int read(){
    int res=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') {res=res*10+(c-'0');c=getchar();}
    return res*f;
}
const int N=5005,M=998244353;
int n,a[N],f[N][N],g[N][N];
signed main(){
    n=read();
    for (int i=1;i<=n;i++) a[i]=read();
    sort(a+1,a+n+1);
    g[0][0]=1;
    for (int i=1;i<=n;i++)
        for (int j=0;j<=a[i];j++){
            g[i][j]+=g[i-1][j],g[i][j]%=M;
            g[i][a[i]-j]+=g[i-1][j],g[i][a[i]-j]%=M;
            f[i][j]+=f[i-1][j],f[i][j]%=M;
            f[i][a[i]-j]+=f[i-1][j]+g[i-1][j]*(a[i]-j),f[i][a[i]-j]%=M;
        }
    int ans=0;
    for (int i=0;i<=n;i++) ans+=f[n][i]+i,ans%=M;
    cout<<ans;
    return 0;
}

样例都没过()

2024/4/13 00:35
加载中...