题解 P4933 【大师】
这题莫名其妙的,怎么算复杂度都是或hack
求给定序列中子序列为等差数列的个数。
记
这样可以二维转移。对于任意
初始化,每个数也可以单独成一个等差数列,那么
转移,
最后统计所有的
然后复杂度不对但就是水过了(
附上AC代码
#include<bits/stdc++.h>
const int mod=998244353;
const int maxn=1010;
using namespace std;
int n,ans;
int h[maxn];
int f[maxn][maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&h[i]),f[0][i]=1; ///在这里就初始化了
ans+=n; ///统计答案
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
{
f[j][i]=f[0][j];
for(int k=1;k<j;k++) if(h[j]*2==h[k]+h[i]) f[j][i]=(f[j][i]+f[k][j])%mod;
ans=(ans+f[j][i])%mod;
}
printf("%d",ans);
return 0;
}