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