P3694 邦邦的大合唱站队/签到题

题目背景

BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题。

题目描述

N个偶像排成一列,他们来自M个不同的乐队。每个团队至少有一个偶像。

现在要求重新安排队列,使来自同一乐队的偶像连续的站在一起。重新安排的办法是,让若干偶像出列(剩下的偶像不动),然后让出列的偶像一个个归队到原来的空位,归队的位置任意。

请问最少让多少偶像出列?

输入输出格式

输入格式:

第一行2个整数N,M。

接下来N个行,每行一个整数a_i(1\le a_i \le M)ai​(1≤ai​≤M),表示队列中第i个偶像的团队编号。

输出格式:

一个整数,表示答案

输入输出样例

输入样例#1: 复制

12 4
1
3
2
4
2
1
2
3
1
1
3
4
输出样例#1: 复制

7

说明

【样例解释】

1  3   √
3 3
2 3 √
4 4
2 4 √
1 2 √
2 2
3 2 √
1 1
1 1
3 1 √
4 1 √

【数据规模】

对于20%的数据,N\le 20, M=2N≤20,M=2

对于40%的数据,N\le 100, M\le 4N≤100,M≤4

对于70%的数据,N\le 2000, M\le 10N≤2000,M≤10

对于全部数据,1\le N\le 10^5, M\le 201≤N≤105,M≤20

#include<cstdio>
const int N=,M=;
int a[N],b[M],n,m,s[M],sum[M][N],ans=<<;
bool vis[M];
void dfs(int i, int tot){
if(i>n){
if(tot<ans) ans=tot;
return;
}
if(tot>ans) return;
for(int j=;j<=m;j++)
if(!vis[j]){
vis[j]=true;
dfs(i+s[j],tot+s[j]-sum[j][i+s[j]-]+sum[j][i-]);
vis[j]=false;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
s[a[i]]++;
}
for(int i=;i<=m;i++)
for(int j=;j<=n;j++){
sum[i][j]=sum[i][j-];
if(a[j]==i) sum[i][j]++;
}
dfs(,);
printf("%d",ans);
}

70分 暴力

/*
状态压缩,dp[i]表示达到i状态出队的最小人数,sum[i][j]表示前i个人有几个属于j乐队那么枚举一个l,r则有dp[i|(1<<j)]=min(dp[i|(1<<j)],dp[i]+(r-l-(sum[r][j]-sum[l][j])));
*/
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,dp[(<<)+],a[],sum[][];
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);a[i]--;
for(int j=;j<m;j++){
sum[i][j]=sum[i-][j];
if(a[i]==j)sum[i][j]++;
}
}
for(int i=;i<(<<m);i++)dp[i]=0x7fffffff;dp[]=;
for(int i=;i<(<<m);i++){
int s=;
for(int j=;j<m;j++)if(i&(<<j))s+=sum[n][j];
for(int j=;j<m;j++){
if(i&(<<j))continue;
int num=sum[n][j];
int r=s+num,l=s;
dp[i|(<<j)]=min(dp[i|(<<j)],(r-l-(sum[r][j]-sum[l][j])+dp[i]));
}
}
printf("%d",dp[(<<m)-]);
}

100分 状压dp

洛谷P3694 邦邦的大合唱站队/签到题的更多相关文章

  1. 状压DP 【洛谷P3694】 邦邦的大合唱站队

    [洛谷P3694] 邦邦的大合唱站队 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...

  2. 洛谷P3694 邦邦的大合唱

    题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...

  3. 洛谷 P2763 试题库问题(网络流24题之一)

    题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...

  4. 洛谷P3694 邦邦的大合唱站队【状压dp】

    状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...

  5. 洛谷 P3694 邦邦的大合唱站队 状压DP

    题目描述 输入输出样例 输入 #1 复制 12 4 1 3 2 4 2 1 2 3 1 1 3 4 输出 #1 复制 7 说明/提示 分析 首先要注意合唱队排好队之后不一定是按\(1.2.3..... ...

  6. 洛谷P2911 [USACO08OCT]牛骨头Bovine Bones【水题】

    题目大意:输入S1,S2,S3,随机生成三个数x,y,z,求x+y+z出现次数最多的数(如果有多个答案输出最小的),其中1<=x<=S1,1<=y<=S2,1<=z< ...

  7. 洛谷-p2764(最小路径覆盖)(网络流24题)

    #include<iostream> #include<algorithm> #include<queue> #include<cstring> #in ...

  8. 洛谷 P1879 玉米田(状压DP入门题)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 相关变量解释: int M,N; int plant[maxn][maxn];/ ...

  9. 洛谷P3926 SAC E#1 - 一道不可做题 Jelly【模拟/细节】

    P3926 SAC E#1 - 一道不可做题 Jelly [链接]:https://www.luogu.org/problem/show?pid=3926 题目背景 SOL君(炉石主播)和SOL菌(完 ...

随机推荐

  1. 分享知识-快乐自己:zookeeper 伪集群搭建

    1):单一 zookeeper  搭建步骤 2):zookeeper 伪集群搭建 1):新建一个集群目录 [root@zoodubbo opt]# mkdir zookeeper_cluster 2) ...

  2. codeforces 655A A. Amity Assessment(水题)

    题目链接: A. Amity Assessment time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  3. tensorflow训练过程中内存溢出

    罪魁祸首是训练过程中给模型传值时的如下语句:

  4. cudnn 卷积例子

    运行环境:linux cuda cudnn cudnn API:https://docs.nvidia.com/deeplearning/sdk/cudnn-developer-guide/index ...

  5. ffpanel --ffmpeg的GUI,让ffmpeg离开黑黑的命令行

    程序及源码下载地址 :https://github.com/langsim/ffpanel   from:http://blog.csdn.net/langsim/article/details/47 ...

  6. ONVIF协议测试工具 ONVIF Device Test Tool 29 12.12 最新版

    ONVIF协议测试工具 ONVIF Device Test Tool 29 12.12 最新版 包含文档和工具,本人亲测,好用! http://download.csdn.net/detail/li_ ...

  7. node-webkit开发基本步骤

    详情请查看:http://www.heiboard.com/?p=2091

  8. BZOJ3307:雨天的尾巴

    浅谈线段树合并:https://www.cnblogs.com/AKMer/p/10251001.html 题目传送门:https://lydsy.com/JudgeOnline/problem.ph ...

  9. 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart

    目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...

  10. UML核心元素--参与者

    定义:参与者是在系统之外与系统交互的某人或某事物.参与者在建模过程中处于核心地位. 1.系统之外:系统之外的定义说明在参与者和系统之间存在明确的边界,参与者只能存在于边界之外,边界之内的所有人和事务都 ...