其他分享
首页 > 其他分享> > P4933 大师

P4933 大师

作者:互联网

传送门

以公差作为状态转移的一维(没见过),状态转移方程为:

dp[ i ][ a[ i ] - a[ j ] ] = Σ(dp[ j ][ a[ i ] - a[ j ] ] + 1)j < i 又因为公差可能为负数,因此在公差上要加上偏移量来实现负数数组,如[ a[ i ] - a[ j ] + maxv ]。

#include<iostream>
#define MAXN 1010
#define MAXV 20007
#define MOD 998244353
using namespace std;
int dp[MAXN][MAXV << 1], a[MAXN], ans, n;
int main(void)
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        for (int j = 1; j < i; j++)
        {
            (dp[i][a[i] - a[j] + MAXV] += dp[j][a[i] - a[j] + MAXV] + 1) %= MOD;
            (ans += dp[j][a[i] - a[j] + MAXV] + 1) %= MOD;
        }
    }
    cout << (ans + n) % MOD;
    return 0;
}

 

标签:int,MAXV,MOD,公差,P4933,大师,dp,define
来源: https://www.cnblogs.com/xqk0225/p/16078926.html