CF79D Password (差分+状压 dp+最短路/bfs)
差分 + 状压 dp + 最短路/bfs
好题。区间取反不好做?考虑差分一下,那么操作就转化为
考虑转移。实际上可以把所有操作拆分成若干条从其中一个
复杂度
#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define fi first
#define se second
#define pb push_back
using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 1e4 + 10, S = 21;
int n, k, l, num;
int a[N], dis[25][N], vis[N], id[N], f[1 << S];
std::vector<int> e[N];
struct com {
int v, w;
friend bool operator < (com a, com b) {
return a.w > b.w;
}
} tmp;
void dij(int s) {
id[++num] = s;
std::priority_queue<com> q;
for(int i = 1; i <= n + 1; i++) dis[num][i] = iinf, vis[i] = 0;
dis[num][s] = 0;
tmp = {s, 0};
q.push(tmp);
while(!q.empty()) {
int u = q.top().v;
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(auto v : e[u]) {
if(dis[num][v] > dis[num][u] + 1) {
dis[num][v] = dis[num][u] + 1;
tmp = {v, dis[num][v]};
q.push(tmp);
}
}
}
return;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> k >> l;
for(int i = 1; i <= k; i++) {
int x;
std::cin >> x;
a[x] = 1;
}
for(int i = 1; i <= l; i++) {
int v;
std::cin >> v;
for(int j = 1; j <= n + 1; j++) {
if(j + v > n + 1) continue;
e[j].pb(j + v);
e[j + v].pb(j);
}
}
int cnt = 0;
for(int i = n + 1; i >= 1; i--) {
a[i] = abs(a[i] - a[i - 1]);
cnt += a[i];
}
for(int i = 1; i <= n + 1; i++) if(a[i]) dij(i);
memset(f, 0x3f, sizeof(f));
f[0] = 0;
int lim = (1 << cnt) - 1;
for(int s = 0; s <= lim; s++) {
for(int i = 0; i < cnt; i++) {
if((s >> i) & 1) continue;
for(int j = i + 1; j < cnt; j++) {
if((s >> j) & 1) continue;
f[s | (1 << i) | (1 << j)] = std::min(f[s | (1 << i) | (1 << j)], f[s] + dis[i + 1][id[j + 1]]);
}
}
}
std::cout << (f[lim] == iinf ? -1 : f[lim]) << "\n";
return 0;
}
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具