cf1215E-Marbles
拦住我的状压
题意:
- 给定一个数组a,且1≤a[i]≤20,a, 且1\leq a[i]\leq 20,a,且1≤a[i]≤20,你现在可以交换其中任意的相邻的两个元素, 现在要求将整个序列变成"相同元素挨在一起"的最少交换次数
数据范围: 2≤n≤4e52 \leq n \leq4e52≤n≤4e5
>> face <<
前置技能:状压dp
Tutorial: 很容易想到用mask来表示颜色的状态, 这里我们用mask表示被选中的颜色排在最前面的情况, 于是我们就可以被选择的颜色让他排在第一位, 然后更新代价, 由于我们选择的颜色是相对位置, 不一定是要排在真正的第一位, 只用排在若干个被选择的颜色的前面成了, 所以考虑维护fir[i][j]fir[i][j]fir[i][j]代表将颜色i全放在颜色j前面要移动多少个颜色j, 这样就可以直接算将i颜色放在相对其他颜色的第一个的代价了
注意状态"0", 然后开ll
#include <bits/stdc++.h>
#include <bits/extc++.h>using namespace std;
#define _rep(n, a, b) for (ll n = (a); n <= (b); ++n)
#define _rev(n, a, b) for (ll n = (a); n >= (b); --n)
#define _for(n, a, b) for (ll n = (a); n < (b); ++n)
#define _rof(n, a, b) for (ll n = (a); n > (b); --n)
#define oo 0x3f3f3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<ll, ll>
const ll mod = 1e9 + 7;
const ll maxn = 2e5 + 5;
ll n, m;vector<vector<ll>> fir;
vector<ll> dp((1 << 20) + 1);
vector<ll> cnt(25);
signed main()
{cin >> n;fir.assign(21, vector<ll> (21, 0));_rep(i, 1, n){ll tmp;cin >> tmp;cnt[tmp]++;_rep(j, 1, 20){fir[tmp][j] += cnt[j];}}_for(mask, 1, (1<<20)){ll sub_min = oo;_rep(i, 0, 20){if((1 << i) & mask){//把i提到最前面的情况ll this_round = 0;_rep(j, 0, 20){if(i == j || ((1 << j) & mask) == 0)continue;this_round += fir[i+1][j+1];}sub_min = min(sub_min, this_round + dp[mask ^ (1 << i)]);}}dp[mask] = sub_min;}cout << dp[(1<<20) - 1] << endl;
}
cf1215E-Marbles相关推荐
- 【CF1215E】Marbles【状压DP】
传送门 题意:给一个长为NNN的序列aaa,每次操作交换两个相邻位置,求最少操作次数使得所有相同的值连成一片. N≤400000N \leq 400000N≤400000,ai≤20a_i \leq2 ...
- UVa10672 - Marbles on a tree(BFS)
n boxes are placed on the vertices of a rooted tree, which are numbered from 1 to n, 1 ≤ n ≤ 10000. ...
- Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对
传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...
- (Fabric 学习六)Fabric2.0 私有数据 使用marbles官方示例
私有数据 从v1.2开始,Fabric 提供了创建私有数据集合的功能,它允许在通道上定义的组织子集能够背书.提交或查询私有数据,而无需创建单独的通道. 产生的原因:一个通道上的一组组织需要对该通道上的 ...
- 超级账本Fabric区块链用弹珠游戏Marbles 部署
Marbles 演示 Marbles GitHub地址 关于 Marbles 这个应用程序的基础网络是 Hyperledger Fabric,后者是一个 Linux Foundation 项目.您可能 ...
- E -Marbles
链接:https://ac.nowcoder.com/acm/contest/18462/E 来源:牛客网 题目描述 For a booth at the campus spring carnival ...
- Marbles CodeForces - 1215E 状态压缩dp
问题: Monocarp has arranged nn colored marbles in a row. The color of the ii-th marble is aiai. Monoca ...
- codechef : Marbles 题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- SPOJ MARBLES
// http://www.spoj.com/problems/MARBLES/ #include <iostream> using namespace std;// 假设30个位置 vo ...
- Hyperledger Fabric 实例 marbles部署错误解决
marbles弹珠实验部署错误解决 采用以下链接教程部署时 https://segmentfault.com/a/1190000014874290 在执行该命令node install_chainco ...
最新文章
- 张仰彪第二排序法_十大排序之冒泡和选择排序
- 酷!一键构建我自己的PHP框架的开发环境
- vue java 插件开发_实习模块vue+java小型全栈开发(三)
- whitepages 被关闭_除了滑动关闭APP影响电池寿命,还有哪些操作触碰到了你的知识盲区?...
- 2006.08.10
- 农业谋定竞争力-农业大健康·万祥军:质量效益促品牌农业
- 「软件项目管理」一文详解软件项目管理概述
- (100)FPGA RAM实现(V实现)
- 查看google chrome版本号及浏览器驱动下载
- 分形与数据结构第一篇(神奇的色子)
- 程序内购买 图文攻略
- 用于Visio的官方cisco 图标库下载地址
- python os模块安装方法_Python模块——os模块详解
- 腾讯云学生机(官网入口)
- python写圣诞祝福_圣诞节啊,用Python写一棵圣诞树出来
- 模型的评估指标(一)
- 微信朋友圈得内容可以爬取吗?看完这篇你心里就有底了
- 安卓开发基础知识3(国内深度摄像头方案)
- R markdown的笔记02
- 计算机专业教师演讲稿,计算机专业演讲稿2篇