Codeforces Round #585 (Div. 2)E(状态压缩DP,思维)
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
long long n,x;
long long num[21],f[1<<20],g[21][21];
int main(){
cin>>n;
for(;n--;){
cin>>x;
++num[--x];//计数--x出现的次数
for(int i=0;i<20;++i)//将x全部放置在相对位置i前面
g[x][i]+=num[i];//num[i]为x前面颜色i的个数
}
for(int i=1;i<1<<20;++i)
f[i]=1e18;
//memset(f,1,sizeof(f));//全部初始为一个很大的值
//f[0]=0;
for(int i=0;i<1<<20;++i)//遍历每一种排列
for(int j=0;j<20;++j)//遍历在i前面的颜色j
if(!(i>>j&1)){//i中如果已经有j就不需要计算了
long long tmp=f[i];//排好i序列的次数
for(int k=0;k<20;++k)
if(i>>k&1)//哪一位上已经排好
tmp+=g[j][k];//加上把j排在k前面的次数
f[i|(1<<j)]=min(f[i|(1<<j)],tmp);//更新把j排在i前面序列的最小值
}
cout<<f[(1<<20)-1];
}
/*#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[400007];
int c[400007];
long long f[(1<<20)+7];
long long dp[(1<<20)+7][27];
int cnt[27];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
c[i]=a[i];
}
sort(c+1,c+1+n);//将a数组复制到c并排序
int m=unique(c+1,c+1+n)-c-1;//找出c数组中不同元素的个数
for(int i=1;i<=n;++i)
a[i]=lower_bound(c+1,c+1+m,a[i])-c;//将a数组改成原本元素最早出现的位置
for(int i=1;i<=n;++i){
++cnt[a[i]];//计数最早出现在该位置元素的个数
for(int j=1;j<=m;++j){
if(!cnt[j]||j==a[i])
continue;
dp[1<<(j-1)][a[i]]+=cnt[j];//出现在a[i]以前的a[j]的个数(将a[i]原本的存放的颜色全部移动到a[j]原本存放的颜色以前所作出的贡献)
}
}
for(int i=0;i<1<<m;++i)
for(int j=1;j<=m;++j)
dp[i][j]=dp[i&(-i)][j]+dp[i^(i&(-i))][j];//将i中位上为1的颜色全部移动到到j颜色之前的贡献等于i去掉最后一位为1的序列的贡献加上i最后一位为1的贡献
memset(f,127/3,sizeof(f)),f[0]=0;
for(int i=0;i<1<<m;++i){
if(f[i]==f[1<<m])
continue;
for(int j=0;j<m;++j)
if(!(i>>j&1))//如果i向右移动j位是偶数(最后一位是0),说明中间有颜色没有移动到它应该的位置上
f[i|(1<<j)]=min(f[i]+dp[i][j+1],f[i|(1<<j)]);//将从右向左j位上的0补成1,它的贡献为自身和f[i]+dp[i][j+1]的最小值(i序列的贡献加上把i序列全部移动到j+1颜色以前的贡献)
}
cout<<f[(1<<m)-1]<<endl;//全部排列为1的贡献就是题意排列的答案
return 0;
}*/
Codeforces Round #585 (Div. 2)E(状态压缩DP,思维)的更多相关文章
- Codeforces Round #673 (Div. 2) C. k-Amazing Numbers (DP,思维)
题意:有一组数,分别用长度从\([1,n]\)的区间去取子数组,要求取到的所有子数组中必须有共同的数,如果满足条件数组共同的数中最小的数,否则输出\(-1\). 题解:我们先从后面确定每两个相同数之间 ...
- Codeforces C. A Simple Task(状态压缩dp)
题目描述: A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...
- Codeforces Round #241 (Div. 2) B. Art Union (DP)
题意:有\(n\)个画家,\(m\)幅画,每个画家负责\(m\)幅画,只有前一个画家画完时,后面一个画家才能接着画,一个画家画完某幅画的任务后,可以开始画下一幅画的任务,问每幅画最后一个任务完成时的时 ...
- B. The Number of Products(Codeforces Round #585 (Div. 2))
本题地址: https://codeforces.com/contest/1215/problem/B 本场比赛A题题解:https://www.cnblogs.com/liyexin/p/11535 ...
- Codeforces Round #585 (Div. 2) D. Ticket Game
链接: https://codeforces.com/contest/1215/problem/D 题意: Monocarp and Bicarp live in Berland, where eve ...
- Codeforces Round #585 (Div. 2) C. Swap Letters
链接: https://codeforces.com/contest/1215/problem/C 题意: Monocarp has got two strings s and t having eq ...
- Codeforces Round #585 (Div. 2) B. The Number of Products(DP)
链接: https://codeforces.com/contest/1215/problem/B 题意: You are given a sequence a1,a2,-,an consisting ...
随机推荐
- 清晰架构(Clean Architecture)的Go微服务: 程序设计
我使用Go和gRPC创建了一个微服务,并将程序设计和编程的最佳实践应用于该项目. 我写了一系列关于在项目工作中做出的设计决策和取舍的文章,此篇是关于程序设计. 程序的设计遵循清晰架构(Clean Ar ...
- linux下的apue.3e安装[Unix环境高级编程]
近期正在看<Unix环境高级编程>一书,目前看了20多页,书中 有几个c的例程,于是想着,也让它运行一下,看看是否跟描述相符,做开发人员本应该这样,于是敲了一部分代码,然后编译,发现并不能 ...
- [C++_QT] 同步方式提交GET和POST请求
#开始 最近在做一个需要用到提交HTTP请求的工具 但是遇到一个问题 如下 在Qt中提交一个get请求之后(或者post) 在收到回复之后会调用之前连接好的槽函数 但是问题就是在主调函数中不知道什么时 ...
- eclipse链接mySQL数据库常见错误
1错误: 解决: 2,用户名输入错误 解决:查看自己的正确用户名https://zhidao.baidu.com/question/248308313.html 3. 解决: 链接示例:https:/ ...
- PS——牛奶字
一.新建800*600像素的背景,设置前景色到透明渐变(黑到白),线性渐变,从上到下画一条直线 二.用矩形选框工具在背景上方1/2位置画一个矩形,Ctrl+Delete填充颜色 三.输入文字,设置图层 ...
- 排序算法之插入排序的python实现
插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待 ...
- 【代码审计】XDCMS 报错注入
审计的都是之前很老的一些的CMS,把学习的过程分享出来,如果有正在和我一起学习的兄弟们,希望看到文章之后会有所收获 ------------------------------------------ ...
- 一个包含arctan与arctanh的积分
\[\Large\int_0^1\frac{\arctan x \,\operatorname{arctanh} x\, \ln x}{x}\mathrm{d}x=\frac{\pi^2}{16}\m ...
- sqlserver数据库中char、varchar、text与nchar、nvarchar、ntext数据类型使用详解
很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大 ...
- 页面阻止某个按键的键盘事件(event.stopPropagation与event.preventDefault的区别及如何兼容IE8)
http://blog.csdn.net/rocklee/article/details/53160656