萌新O(nv)算法求调,过不了样例

P4933 大师

```cpp #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define mod %998244353 #define ll long long using namespace std; const int N = 1e3 + 10; const int M = 2e4 + 10; int n; int h[N]; ll dp1[M][N]; ll dp2[M][N]; ll G1[M]; ll G2[M]; ll ans = 0; int D = 0, minH = 0x7fffffff, maxH = 0; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> h[i]; minH = min(minH, h[i]); maxH = max(maxH, h[i]); } D = maxH - minH; for (int k = 0; k <= D; k++) { memset(G1, 0, sizeof(G1)); memset(G2, 0, sizeof(G2)); for (int i = 1; i <= n; i++) { if (h[i] - k >= minH) dp1[k][i] = G1[h[i] - k]; if (h[i] + k <= maxH && k) dp2[k][i] = G2[h[i] + k]; G1[h[i]] += dp1[k][i] mod + 1, G1[h[i]] mod; G2[h[i]] += dp2[k][i] mod + 1, G2[h[i]] mod; ans += (dp1[k][i] mod + dp2[k][i] mod ) mod, ans mod; } } cout << (ans + n) mod; return 0; } ``` 已解决
by Kdlyh @ 2023-11-14 17:52:59


|