CF1456E XOR-ranges
首先发现这种上下界再结合数据范围,显然是让我们把一个数拆成个数不大于
考虑从高位到低位确定答案。把每个数拆位列出来,发现如果使用前缀 dp 考虑前一个与后一个的答案没用什么进展。而我们如果把相邻的三个列出来,发现如果中间数这个有限制的段最短的话,新的答案贡献只与外面两个数有关。我们发现这种情况是可以拓展归纳的,对于最小化代价我们可以考虑区间 dp,对于一个区间我们关心它的答案,并且我们需要钦定区间左边的位置和右边的位置都还存在限制,那么对于当前左右两边的状态我们需要知道他是贴着
那么如果
而如果区间
然后有一些细节,比如说需要保证该转移合法,并且有的数到最后都没有解除限制,这些都是要考虑的。
时间复杂度
#include <bits/stdc++.h>
#define int long long
#define ls (p << 1)
#define rs (ls | 1)
#define rep(i, l, r) for (int i = l; i <= r; ++ i)
#define rrp(i, l, r) for (int i = r; i >= l; -- i)
#define pii pair <int, int>
#define eb emplace_back
#define x first
#define y second
#define inf 1000000000
#define linf 1000000000000000000
using namespace std;
typedef long long ll;
constexpr int N = 50 + 5, P = 998244353;
inline int rd () {
int x = 0, f = 1;
char ch = getchar ();
while (! isdigit (ch)) { if (ch == '-') f = -1; ch = getchar (); }
while (isdigit (ch)) { x = (x << 1) + (x << 3) + ch - 48; ch = getchar (); }
return x * f;
}
int n, K;
int L[N], R[N], a[N];
int f[N][N][N][2][2][2][2];
void chk (int &x, int y) {
x = min (x, y);
}
int dfs (int c, int l, int r, int p1, int p2, int q1, int q2) {
if (c == K) return l > r ? 0 : 1e18;
int &ret = f[c][l][r][p1][p2][q1][q2];
if (~ ret) return ret;
ret = 1e18;
int vl = ((p1 ? R[l - 1] : L[l - 1]) >> c) ^ p2;
int vr = ((q1 ? R[r + 1] : L[r + 1]) >> c) ^ q2;
chk (ret, dfs (c + 1, l, r, p1, 0, q1, 0) + a[c] * (l != 1 && r != n && ((vl ^ vr) & 1)));
rep (k, l, r) {
rep (o, 0, 1) {
if (! c) chk (ret, dfs (c, l, k - 1, p1, p2, o, 0) + dfs (c, k + 1, r, o, 0, q1, q2));
int w = (o ? R[k] : L[k]) ^ (1ll << c);
if (L[k] <= (w & (~ ((1ll << c) - 1))) && (w | ((1ll << c) - 1)) <= R[k])
chk (ret, dfs (c, l, k - 1, p1, p2, o, 1) + dfs (c, k + 1, r, o, 1, q1, q2));
}
}
return ret;
}
int32_t main () {
// freopen ("1.in", "r", stdin);
// freopen ("1.out", "w", stdout);
memset (f, -1, sizeof f);
n = rd (), K = rd ();
rep (i, 1, n) L[i] = rd (), R[i] = rd ();
rep (i, 0, K - 1) a[i] = rd ();
cout << dfs (0, 1, n, 0, 0, 0, 0);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?