洛谷P3694 邦邦的大合唱站队/签到题
P3694 邦邦的大合唱站队/签到题
题目背景
BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题。
题目描述
N个偶像排成一列,他们来自M个不同的乐队。每个团队至少有一个偶像。
现在要求重新安排队列,使来自同一乐队的偶像连续的站在一起。重新安排的办法是,让若干偶像出列(剩下的偶像不动),然后让出列的偶像一个个归队到原来的空位,归队的位置任意。
请问最少让多少偶像出列?
输入输出格式
输入格式:
第一行2个整数N,M。
接下来N个行,每行一个整数a_i(1\le a_i \le M)ai(1≤ai≤M),表示队列中第i个偶像的团队编号。
输出格式:
一个整数,表示答案
输入输出样例
说明
【样例解释】
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 邦邦的大合唱站队/签到题的更多相关文章
- 状压DP 【洛谷P3694】 邦邦的大合唱站队
[洛谷P3694] 邦邦的大合唱站队 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...
- 洛谷P3694 邦邦的大合唱
题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...
- 洛谷 P2763 试题库问题(网络流24题之一)
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- 洛谷P3694 邦邦的大合唱站队【状压dp】
状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...
- 洛谷 P3694 邦邦的大合唱站队 状压DP
题目描述 输入输出样例 输入 #1 复制 12 4 1 3 2 4 2 1 2 3 1 1 3 4 输出 #1 复制 7 说明/提示 分析 首先要注意合唱队排好队之后不一定是按\(1.2.3..... ...
- 洛谷P2911 [USACO08OCT]牛骨头Bovine Bones【水题】
题目大意:输入S1,S2,S3,随机生成三个数x,y,z,求x+y+z出现次数最多的数(如果有多个答案输出最小的),其中1<=x<=S1,1<=y<=S2,1<=z< ...
- 洛谷-p2764(最小路径覆盖)(网络流24题)
#include<iostream> #include<algorithm> #include<queue> #include<cstring> #in ...
- 洛谷 P1879 玉米田(状压DP入门题)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 相关变量解释: int M,N; int plant[maxn][maxn];/ ...
- 洛谷P3926 SAC E#1 - 一道不可做题 Jelly【模拟/细节】
P3926 SAC E#1 - 一道不可做题 Jelly [链接]:https://www.luogu.org/problem/show?pid=3926 题目背景 SOL君(炉石主播)和SOL菌(完 ...
随机推荐
- 浏览器访问web站点原理图
启动tomcat,在浏览器中输入http://localhost:8080/web_kevin/hello.html,发生的事情如下: 1.浏览器解析主机名,即解析localhost.浏览器首先会到本 ...
- kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了
先看数据: 特征如下: Time Number of seconds elapsed between each transaction (over two days) numeric V1 No de ...
- appium-环境搭建(三)
appium步骤:基本环境1.由于操作手机端操作,需要模拟器或者真机 itools模拟器,真机2.appium操作app,需要知道操作的app是什么?需要知道这个app包名 1.问开发 2.利用adt ...
- 5 Python 数据类型—数字
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. var1 = 1 var2 = 10 您也可以使用de ...
- PHP使用http_build_query()构造URL字符串的方法
http_build_query http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( array formda ...
- [冬令营模拟]GTSG2018
上学期没有去 GTSG,于是今天老师让我们来做一下 GTSG2018 Day1 & Day3 Day1 在上午当成一场考试来搞了,Day3 由于锅太多而且 T3 玄学而被放到下午自学... 上 ...
- 浅谈MVC、MVP、MVVM模式
mvc的模式已经深入人心,想必大家都很熟悉,但是未必都能遵守mvc模式.我们的一个mvc项目比较简单,主要是数据库的查询.一个DBHelp类,封装了数据库的操作,然后Controller中进行中各种查 ...
- bzoj 4822~4824 CQOI2017题解
老C的任务 题目大意: 维护一个二维平面,初始给出一些点及其权.多次询问某个矩形内的权和. n,m <= 100000 题解: 签到题. CDQ水一水. #include <cstdio& ...
- Linux 系统通过 Squid 配置实现代理上网
本文转载自:https://help.aliyun.com/knowledge_detail/41342.html Squid 介绍 Squid 是一个缓存 Internet 数据的软件,其接收用户的 ...
- HDOJ5438(图的各个连通分量遍历)
#include<cstdio> #include<cstring> using namespace std; ; template<class T> struct ...