题解
2026-08-20 10:45:34
发布于:广东
0阅读
0回复
0点赞
留个点赞和关注在走吧?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1005;
const int MOD = 998244353;
#define endl '\n'
int h[N];
int f[N][40005];
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &h[i]);
const int OFFSET = 20005;
ll ans = n; // 单塔方案
// f[i][d]: 以 i 结尾,公差 d 的等差子序列数(长度 ≥ 2)
for(int i = 1; i <= n; i++){
for(int j = 1; j < i; j++){
int d = h[i] - h[j] + OFFSET;
f[i][d] = (f[i][d] + f[j][d] + 1) % MOD;
}
for(int d = 0; d < 40005; d++){
ans = (ans + f[i][d]) % MOD;
}
}
printf("%lld\n", ans);
return 0;
}
这里空空如也







有帮助,赞一个