CF1603E A Perfect Problem 题解
Description
称一个序列为好序列当且仅当这个序列的
给定
Solution
容易发现可以将序列排序后转化为判断所有前缀是否合法。这样就可以暴力 dp 了,时间复杂度:
考虑优化。下面有合法序列的几条性质:
-
,因为如果 ,则 ,矛盾了。 -
若
,则 。因为 ,所以 。 -
若
,则 , 合法。因为 ,则 ,所以 。
对于
对于
-
。 -
。 -
。
设
-
。 -
。 -
。
这样就可以 dp 了。先枚举
转移时可以枚举
时间复杂度:
注意到
这样
时间复杂度:
Code
#include <bits/stdc++.h> // #define int int64_t const int kMaxN = 205; int n, mod; int fac[kMaxN], ifac[kMaxN], f[kMaxN][kMaxN][kMaxN]; constexpr int qpow(int bs, int64_t idx = mod - 2) { int ret = 1; for (; idx; idx >>= 1, bs = (int64_t)bs * bs % mod) if (idx & 1) ret = (int64_t)ret * bs % mod; return ret; } inline int add(int x, int y) { return (x + y >= mod ? x + y - mod : x + y); } inline int sub(int x, int y) { return (x >= y ? x - y : x - y + mod); } inline void inc(int &x, int y) { (x += y) >= mod ? x -= mod : x; } inline void dec(int &x, int y) { (x -= y) < 0 ? x += mod : x; } void prework() { fac[0] = ifac[0] = fac[1] = ifac[1] = 1; for (int i = 2; i <= n + 1; ++i) { fac[i] = 1ll * i * fac[i - 1] % mod; ifac[i] = qpow(fac[i]); } } void dickdreamer() { std::cin >> n >> mod; prework(); int ans = 1; for (int a1 = std::max<int>(n - 18, 1); a1 <= n; ++a1) { for (int i = 0; i <= n; ++i) for (int j = 0; j <= a1; ++j) for (int k = 0; k <= n - a1 + 1; ++k) f[i][j][k] = 0; for (int i = 1; i <= a1; ++i) { f[i][0][0] = 1ll * fac[n] * ifac[i] % mod; } for (int k = 1; k <= n - a1 + 1; ++k) { for (int i = 1; i <= n; ++i) { for (int j = 0; j <= a1; ++j) { for (int cnt = 0; cnt <= std::min(n - i, (a1 - j) / k); ++cnt) { if (k >= i + cnt - a1 + 1) { inc(f[i + cnt][j + cnt * k][k], 1ll * f[i][j][k - 1] * ifac[cnt] % mod); } } } } } for (int i = 0; i <= a1; ++i) inc(ans, f[n][i][n - a1 + 1]); } std::cout << ans << '\n'; } int32_t main() { #ifdef ORZXKR freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0); int T = 1; // std::cin >> T; while (T--) dickdreamer(); // std::cerr << 1.0 * clock() / CLOCKS_PER_SEC << "s\n"; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步