【CF1215E】Marbles【状压DP】

传送门

题意:给一个长为NNN的序列aaa,每次操作交换两个相邻位置,求最少操作次数使得所有相同的值连成一片。

N≤400000N \leq 400000N400000,ai≤20a_i \leq20ai20

我们发现aia_iai很小,盲猜单独考虑

我们重新确认一个宏大的时空观

把所有位置按值分组,然后一组一组加进去。在某一组没有加之前,这个位置是不存在的,即1 3 2在没有加3时,1 2是相邻的。

cnt[i][j]cnt[i][j]cnt[i][j]表示只有iiijjj两组数时,把所有iii移到jjj的前面的最小操作次数

这个可以暴力枚举iiijjj,然后双指针即可

考虑状压

dp[S]dp[S]dp[S]表示当前加入的数的状态为SSS的最小操作次数 我们新加一个数时,把散装的都移到最前面。因为cntcntcnt是单独考虑的,所以加起来就可以了

dp[S]=min⁡i∈S{dp[S−{i}]+∑j∈S,i≠jcnt[i][j]}dp[S]=\min_{i \in S}\{dp[S-\{i\}]+\sum_{j\in S,i\neq j}cnt[i][j]\}dp[S]=iSmin{dp[S{i}]+jS,i=jcnt[i][j]}

最后的dp[2n−1]dp[2^n-1]dp[2n1]即答案

复杂度O(na2+2aa2)O(na^2+2^aa^2)O(na2+2aa2)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
using namespace std;
typedef long long ll;
inline int read()
{int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
vector<int> v[20];
ll cnt[20][20],dp[1<<20];
int main()
{int n=read();for (int i=1;i<=n;i++) v[read()-1].push_back(i);for (int i=0;i<20;i++)for (int j=0;j<20;j++)if (i!=j){int pos=-1;for (int k=0;k<v[i].size();k++){while (pos+1<v[j].size()&&v[j][pos+1]<v[i][k]) ++pos;cnt[i][j]+=pos+1;}}dp[0]=0;for (int s=1;s<(1<<20);s++){dp[s]=1e18;for (int i=0;i<20;i++)if (s&(1<<i)){ll sum=0;for (int j=0;j<20;j++)if (s&(1<<j))sum+=cnt[i][j];dp[s]=min(dp[s],dp[s^(1<<i)]+sum);					}	}cout<<dp[(1<<20)-1];return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统用户管理菜单管理角色管理权限管理[精确到按钮]&#xff09;代码生成器代码克隆到本地 用vs2017或以上版本 打开工程。项目结构如下&#xff1a;找到DbModel下面的初始化db脚本里面包含4张表的schema和初始化数据…

剑指 Offer 25. 合并两个排序的链表

输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 思路&#xff1a;和…

Codeforces Round #720 (Div. 2) C. Nastia and a Hidden Permutation 交互

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个序列ppp长度nnn&#xff0c;每次可以执行两个种询问&#xff1a; t1max(min(x,pi),min(x1,pj))t1\ \ max(min(x,p_i),min(x1,p_j))t1 max(min(x,pi​),min(x1,pj​)) t2min(max(x,pi),max(x1,pj))t…

【NOIP2018】赛道修建【二分】【树形dp】【multiset】【贪心】

传送门 题意&#xff1a;给一棵带边权的树&#xff0c;求MMM条没有公共边的路径的最小长度的最大值。 N≤50000N \leq50000N≤50000 抛开NOIP不谈&#xff0c;其实这题本身出的很好 显然二分 问题转化成了“最多可以找多少条长度不小于kkk的路径” 递归处理 对于每个结点…

asp.net core 系列之Startup

这篇文章简单记录 ASP.NET Core中 &#xff0c;startup类的一些使用。一.前言在 Startup类中&#xff0c;一般有两个方法&#xff1a;ConfigureServices 方法: 用来配置应用的 service 。 Configure 方法&#xff1a;创建应用的请求处理管道它们都在应用启动时&#xff0c;被AS…

可持久化Splay 学习笔记

可持久化Splay是怎么回事呢&#xff1f;Splay相信大家都很熟悉&#xff0c;但是可持久化Splay是怎么回事呢&#xff0c;下面就让小编带大家一起了解吧。   可持久化Splay&#xff0c;其实就是将Splay持久化一下&#xff0c;大家可能会很惊讶Splay怎么可以持久化呢&#xff1f…

译 | .NET Core 基础架构进化之路(一)

原文&#xff1a;Matt Mitchell翻译&#xff1a;Edi Wang随着 .NET Core 3.0 Preview 6 的推出&#xff0c;我们认为简要了解一下我们基础设施系统的历史以及过去一年左右所做的重大改进会很有用。如果您对构建基础结构感兴趣&#xff0c;或者想要了解我们如何构建与 .NET Core…

【洛谷P4705】玩游戏【二项式定理】【NTT卷积】【生成函数】【分治NTT】【函数求导】【多项式对数】

传送门 题意&#xff1a;给定长度为N,MN,MN,M的序列a,ba,ba,b和ttt&#xff0c;随机选取x∈[1,N],y∈[1,M]x \in[1,N],y\in[1,M]x∈[1,N],y∈[1,M],对于i1,2,...,t,i 1,2,...,t,i1,2,...,t,求(axby)i(a_xb_y)^i(ax​by​)i的期望 N,M,t≤100000N,M,t \leq100000N,M,t≤100000 …

剑指 Offer 27. 二叉树的镜像

思路&#xff1a;递归 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* mirrorTree(TreeNode*…

Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn的序列aaa&#xff0c;让你计算 n≤4e5,a≤1e7n\le 4e5,a\le 1e7n≤4e5,a≤1e7 思路&#xff1a; 首先这个式子是n2n^2n2的&#xff0c;显然不能直接算&#xff0c;并且异或没有分配律&…

.NET开发框架(一)-框架介绍与视频演示

本文主要介绍一套基于.NET CORE的SPA高并发、高可用的开发框架.我们暂且称它为&#xff1a;&#xff08;让你懂.NET&#xff09;开发框架。以此为主线&#xff0c;陆续编写教程&#xff0c;讲述如何构建高并发、高可用的框架。&#xff08;欢迎转载与分享&#xff09;它标准化了…

【CF700E】Cool Slogans【后缀自动机】【可持久化线段树合并】【树上倍增】

传送门 题意&#xff1a;给定字符串SSS&#xff0c;求一堆字符串s1,s2,s3,...,sks_1,s_2,s_3,...,s_ks1​,s2​,s3​,...,sk​&#xff0c;满足s1s_1s1​是SSS的子串&#xff0c;且sis_isi​在si−1s_{i-1}si−1​中至少出现两次&#xff0c;最大化kkk ∣S∣≤200000|S| \leq …

P1377 [TJOI2011]树的序 笛卡尔树优化建树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一棵二叉树的生成序列&#xff0c;让你输出一个字典序最小的序列&#xff0c;使其生成的二叉树与原来的二叉树相同。 思路&#xff1a; 首先想到暴力建树&#xff0c;让后输出先序遍历即可&#xff0c…

译 | .NET Core 基础架构进化之路(二)

原文&#xff1a;Matt Mitchell翻译&#xff1a;Edi Wang&#xff08;接上篇 译 | .NET Core 基础架构进化之路&#xff08;一&#xff09;&#xff09;Maestro 及依赖流.NET Core 3.0 基础结构难题的最后一部分就是我们所说的依赖项流。这不是 .NET Core 的唯一概念。除非它们…

【NOI2019】回家路线【无后效性dp状态设计】【斜率优化】

传送门 题意&#xff1a;给定MMM个班车&#xff0c;每个班车pip_ipi​时刻从xix_ixi​发车qiq_iqi​到达yiy_iyi​&#xff0c;等车ttt时间花费代价At2BtCAt^2BtCAt2BtC,在ttt时刻到达花费ttt的代价&#xff0c;求从111到NNN的最小花费。 1≤N≤100000,1≤M≤2000001 \leq N \…

Codeforces Round #628 (Div. 2) E. Ehab‘s REAL Number Theory Problem 巧妙的质因子建图

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn个数&#xff0c;每个数的因子个数不超过777个&#xff0c;选出最少的数使其乘积为平方数。 n≤1e5n\le 1e5n≤1e5 思路&#xff1a; 由于因子不超过777个&#xff0c;所以由约数个数(1p1)∗(1p2)∗…

在.Net Core中实现一个WebSocket路由

Net Core中使用WebSocket默认是没有路由系统的&#xff0c;只能通过Request.Path"/xxx"来判断请求&#xff0c;例如&#xff1a;1 2 3 4 5 6 7 8 91011121314151617181920app.Use(async (context, next) >{ if (context.Request.Path "/ws") { …

【CF1189D】Add on a Tree【结论】【构造】

传送门 题意&#xff1a;给一棵NNN个结点的树&#xff0c;构造或判断无法构造若干次操作&#xff0c;每次操作选择两个叶节点将路径上的边加上一定整数权值&#xff0c;使得每条边等于给定权值。权值互不相同且为偶数。 1≤N≤10001 \leq N \leq10001≤N≤1000 结论&#xff…

Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个nnn个点mmm条边的图&#xff0c;可以选择完成以下两个任务中的一个&#xff1a; (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集。 (2)(2)(2)找出一个长度≥n\ge \sqrt n≥n​的一个环。 n≤1e5,m≤…

Dapper介绍--Micro-ORM

一&#xff0e;概述目前对于.net的数据访问ORM工具很多&#xff0c;EF和EF Core是一个重量级的框架。最近在搭建新的项目架构&#xff0c;来学习一下轻量级的数据访问ORM工具Dapper。Dapper支持SQL Server&#xff0c;MySQL&#xff0c;Sqlite&#xff0c;SqlCE&#xff0c;Fir…