CF79D
题意:初始有
范围:
关于区间取反的,考虑差分。根据
然后区间取反就变成两个单点取反。
要求从全
发现这个过程具有可逆性,所以可以看作从目标状态变成全0。
再看一看,发现一定不会把两个0变成两个1,这样一定不优;一个 0 一个 1 取反可以视作交换。
所以每次操作实际上是选定两个 1,经过若干次交换来调整位置,然后把它们消掉。(注意包括
注意到
初值
递推:枚举
怎么求
然后从差分序列中每个
#include <bits/stdc++.h>
using namespace std;
const int N = (1 << 20) + 5;
int n, k, l, a[105];
int x[10005];
int rev[10005];
vector<int> v;
int f[25][25];
int dp[N];
vector<int> e[10005];
int dist[10005];
void bfs(int s) {
// if (s == 2)
// cout << s << endl;
queue<int> q;
memset(dist, 0x3f, sizeof dist);
dist[s] = 0;
q.push(s);
while (!q.empty()) {
int h = q.front();
q.pop();
// if (s == 2)
// cout << h << endl;
for (auto i: e[h])
if (dist[i] == 0x3f3f3f3f) {
dist[i] = dist[h] + 1;
q.push(i);
}
}
}
void init() { //预处理
for (int i = 0; i < v.size(); i++) {
bfs(v[i]);
for (int j = 0; j < v.size(); j++) {
f[rev[v[i]]][rev[v[j]]] = dist[v[j]];
// printf("%d=>%d:%d\n", rev[i], rev[v[j]], dist[v[j]]);
}
}
}
int main() {
cin >> n >> k >> l;
for (int i = 1, tmp; i <= k; i++) {
cin >> tmp;
x[tmp] ^= 1;
x[tmp + 1] ^= 1;
}
for (int i = 1; i <= l; i++) {
cin >> a[i];
for (int j = 1; j + a[i] <= n + 1; j++) {
e[j].push_back(j + a[i]);
e[j + a[i]].push_back(j);
}
}
// for (int i = 1; i <= n + 1; i++)
// cout << x[i] << ' ';
// puts("");
//要把x数组全部消成0
for (int i = 1; i <= n + 1; i++)
if (x[i] == 1) {
rev[i] = v.size();
v.push_back(i);
}
init();
// cout << f[0][1] << endl;
memset(dp, 0x3f, sizeof dp);
dp[0] = 0;
for (int S = 1; S < (1 << v.size()); S++) {
for (int i = 0; i < v.size(); i++)
if (((S >> i) & 1) == 1) {
for (int j = i + 1; j < v.size(); j++)
if (((S >> j) & 1) == 1)
dp[S] = min(dp[S], dp[S - (1 << i) - (1 << j)] + f[i][j]);
}
}
if (dp[(1 << v.size()) - 1] == 0x3f3f3f3f)
cout << -1 << endl;
else
cout << dp[(1 << v.size()) - 1] << endl;
return 0;
}
//1 2 10000 10001
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!