[luoguP3694] 邦邦的大合唱站队/签到题(状压DP)
来自kkk的题解:
70分做法:枚举每个学校顺序,暴力。
100分:状压dp。从队列头到尾DP,
状态:f[i]表示i状态下最小的出列(不一致)的个数。
比如f[1101]表示从头到位为1/3/4乐队的偶像的最小出列个数。
f[i]=min(f[i\ xor\ 2^j]+num[j]-(sum[length][j]-sum[length-num[j]][j]));f[i]=min(f[i xor 2j]+num[j]−(sum[length][j]−sum[length−num[j]][j]));
j表示团队编号,sum表示某种团队的前缀和,length表示到此已经排到的长度。
#include <cstdio>
#include <cstring>
#include <iostream>
#define M 21
#define N 100001
#define min(x, y) ((x) < (y) ? (x) : (y)) int n, m, S, cnt;
int sum[N][M], num[M], f[1 << M]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} int main()
{
int i, j, x;
n = read();
m = read();
memset(f, 127, sizeof(f));
for(i = 1; i <= n; i++)
{
x = read();
num[x]++;
for(j = 1; j <= m; j++)
sum[i][j] = sum[i - 1][j] + (x == j);
}
f[0] = 0;
for(i = 1; i < (1 << m); i++)
{
S = 0;
for(j = 1; j <= m; j++)
if(i & (1 << j - 1))
S += num[j];
for(j = 1; j <= m; j++)
if(i & (1 << j - 1))
{
cnt = num[j] - sum[S][j] + sum[S - num[j]][j];
f[i] = min(f[i], f[i ^ (1 << j - 1)] + cnt);
}
}
printf("%d\n", f[(1 << m) - 1]);
return 0;
}
[luoguP3694] 邦邦的大合唱站队/签到题(状压DP)的更多相关文章
- P3694 邦邦的大合唱站队/签到题(状压dp)
P3694 邦邦的大合唱站队/签到题 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...
- 【思维题 状压dp】APC001F - XOR Tree
可能算是道中规中矩的套路题吧…… Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree wit ...
- 6.28 NOI模拟赛 好题 状压dp 随机化
算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...
- 洛谷P3694 邦邦的大合唱站队【状压dp】
状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...
- P3694 邦邦的大合唱站队 (状压DP)
题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...
- Luogu P3694 邦邦的大合唱站队 【状压dp】By cellur925
题目传送门 最开始学状压的时候...学长就讲的是这个题.当时对于刚好像明白互不侵犯和炮兵阵地的我来说好像在听天书.......因为我当时心里想,这又不是什么棋盘,咋状压啊?!后来发现这样的状压多了去了 ...
- QDUOJ 来自xjy的签到题(bfs+状压dp)
来自xjy的签到题 Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,‘#’表示爱丽丝不能到达这个格子,爱丽丝每1 ...
- 刷题向》关于第一篇状压DP BZOJ1087 (EASY+)
这是本蒟蒻做的第一篇状压DP,有纪念意义. 这道题题目对状压DP十分友善,算是一道模板题. 分析题目,我们发现可以用0和1代表每一个格子的国王情况, 题目所说国王不能相邻放置,那么首先对于每一行是否合 ...
- 【bzoj1087】【互不侵犯King】状压dp裸题(浅尝ACM-D)
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=54329606 向大(hei)佬(e)势力学(di ...
- 刷题总结——bzoj1725(状压dp)
题目: 题目描述 Farmer John 新买了一块长方形的牧场,这块牧场被划分成 N 行 M 列(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地. FJ ...
随机推荐
- AJPFX总结抽象类和接口的区别
/* * 抽象类和接口的区别 * 1.成员的区别 * ...
- windows下常用的一些shell命令
看的视频上都是linux系统的shell命令,和windows区别很多.所以整理了windows常用的一些shell命令. 注意:并不是每个都试验过,使用时还需自己验证下. 学system和os,su ...
- java实现单向链表的增、删、改、查
单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...
- 为Qt添加SSL支持
目标:为Qt添加SSL支持,使得应用可以发送HTTPS请求 环境:win7,Qt4.8.6 步骤: 1.到http://slproweb.com/products/Win32OpenSSL.html下 ...
- Summary of 2016 International Trusted Computing and Cloud Security Summit
1) Welcome Remarks 2) The advancement of Cloud Computing and Tursted Computing national st ...
- vba,自定义公式,农历互转公历,excel ,wps
'vba 模块内容如下 自定义公式 '公历转农历模块 '原创:互联网 '修正: '// 农历数据定义 // '先以 H2B 函数还原成长度为 18 的字符串,其定义如下: '前12个字节代表1-12月 ...
- 洛谷 P2680 运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...
- codevs 6116 区间素数
时间限制: 8 s 空间限制: 256000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小明喜欢研究素数,他想统计两个自然数之间的素数个数,现在 ...
- (转)Spring+JDBC组合开发
http://blog.csdn.net/yerenyuan_pku/article/details/52882435 搭建和配置Spring与JDBC整合的环境 使用Spring+JDBC集成步骤如 ...
- SoapUI对于Json数据进行属性值获取与传递
SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML ...