题目描述

有N个人,来自K个家族.他们排成一行准备照相,但是由于天生的排外性,每个人都希望和本家族的人站在一起,中间不要加入别的家族的人.问最少从队列中去掉多少个就可以达到这个目的.

输入格式

第一行给出N,K。N在[1,100],K在[1,5]

第二行给出N个数,每个数为1到K中的某个数。

输出格式

最少从队列中去掉多少个就可以达到这个目的


显然对于当前第i个点我们可以做两个操作:留下或者删去。

如果留下,就会有两种情况:第i个人和上一个留下的人属于同一个家族。第二种情况是不属于同一个家族,那么我们的状态需要从当前有人留下的家族转移过来。

如果删去则不需要考虑任何东西。

综合上面的分析,可以知道我们需要的信息有:当前是第几个人,当前选了那些家族,处理完当前人之后最后一个留下的人的家族。

那么可以设计出这样的状态:dp(i,j,k),表示当前为第i个人,当前选的家族情况的二进制表示为j,最后一个留下的人的家族为k。设第i个人的家族为col,那么可以得出状态转移方程:

\[ dp[i][j][col]=Max_{1≤k≤K}{\{}dp[i-1][j{\wedge}R(1<<col)][k]+1{\}} \]

初始化都为0,答案为n-Max{dp(n,i,j)}

时间复杂度为O(NK * 2^K)。

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 101
#define maxm 6
using namespace std;int dp[maxn][1<<maxm][maxm];
int n,m,ans;
inline int read(){register int x(0),f(1); register char c(getchar());while(c<'0'||'9'<c){ if(x=='-') f=-1; c=getchar(); }while('0'<=c&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}int main(){//freopen("photo.in","r",stdin);//freopen("photo.out","w",stdout);n=read(),m=read();for(register int i=1;i<=n;i++){int col=read()-1;memcpy(dp[i],dp[i-1],sizeof dp[i-1]);for(register int j=0;j<1<<m;j++) if(j&(1<<col)){dp[i][j][col]=max(dp[i][j][col],dp[i-1][j][col]+1);for(register int k=0;k<m;k++){dp[i][j][col]=max(dp[i][j][col],dp[i-1][j^(1<<col)][k]+1);}}}for(register int i=0;i<1<<m;i++){for(register int j=0;j<m;j++){ans=max(ans,dp[n][i][j]);}}printf("%d\n",n-ans);return 0;
}

转载于:https://www.cnblogs.com/akura/p/11045948.html

入门OJ:photo相关推荐

  1. 2019.6.7 一场搜索专题的考试【including 洛谷·血色先锋队,入门OJ·兴建高铁,珠光宝气阁

    这次分数还好.但全是搜索题还没上200就有点打击人了--[本狸才177QAQ 血色先锋队/血色敢死队 传送门:洛谷P1332 & 入门OJ P2259 Description 邪魔天国领主复活 ...

  2. begin.lydsy 入门OJ题库:1104:纯粹合数

    1104: 纯粹素数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 258  Solved: 91 [Submit][Status][Web Boar ...

  3. begin.lydsy 入门OJ题库:1101、1102:那些四位数、那些四位数之二

    1101: 那些四位数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 205  Solved: 160 [Submit][Status][Web Bo ...

  4. begin.lydsy 入门OJ题库:1104:那些N位数

    1103: 那些N位数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 231  Solved: 97 [Submit][Status][Web Boa ...

  5. 【bzoj 入门OJ】[NOIP 热身赛]Problem C: 星球联盟(并查集)

    Problem C: 星球联盟 Time Limit: 4 Sec  Memory Limit: 256 MB Submit: 57  Solved: 15 [Submit][Status][Web ...

  6. [Usaco2010 Hol]cowpol 奶牛政坛(入门oj Problem 5274)

    第三次发题解哈.有什么表述错误的请见谅(可以提出). 题目源地址:https://www.lydsy.com/JudgeOnline/problem.php?id=1776 文章目录 题目描述 输入 ...

  7. [usaco2010 Oct]Soda Machine (入门oj Problem 6195 )

    鬼知道我有多蒟蒻,第五次发题解了 题目原地址点此进入 呜呜呜~今天在CSDN上看了好多大佬神犇的OI退役文,百感交集,故写篇题解振奋自己. 文章目录 题目描述 输入 输出 样例输入 样例输出3 题目大 ...

  8. 问题 J: [入门OJ]求和 为 C(初中生请多多指教)

    时间限制: 1 Sec  内存限制: 256 MB 题目描述 楠楠在网上刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:求和为C的Problem,难倒了一群小朋友,哈哈 ...

  9. 问题 A: [入门OJ]买水果(初中生请多多指教)

    在学校电脑搞的 时间限制: 1 Sec  内存限制: 256 MB 题目描述 萌萌和瞳瞳各拿 N 元去买苹果和西瓜,已知每个苹果的价格是 a. 每个西瓜的价格是 b. \n 萌萌希望 N 元买苹果全部 ...

  10. 入门OJ 3793: [Noip模拟题]剪草 (DP)

    题目 Description 有N棵小草,编号0至N-1.奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H.在第0时刻,第i棵小草的高度是h[i],接下 ...

最新文章

  1. HttpClient 学习整理(转)
  2. 前端学习(2552):vue简介
  3. android 自定义透明 等待 dialog,Android自定义Dialog内部透明、外部遮罩效果
  4. C语言 strftime 格式化显示日期时间 时间戳
  5. python基础3之文件操作、字符编码解码、函数介绍
  6. 关于Patter类和Match类
  7. 牛b硬件信息修改大师_比X大师更靠谱?一款真正良心的硬件检测工具
  8. mysql v$session_关于V$SESSION视图
  9. win7下linux 双系统安装教程,【系统安装】双系统——Win7下安装linux系统详细步骤...
  10. esxi安装报错解决方案
  11. 网友自制的谷歌输入法皮肤及制作方法
  12. 十年感悟之 python之路
  13. Jenkins基础:获取Jenkins-Crumb的错误信息与对应方法
  14. 【USACO题库】1.5.4 Checker Challenge跳棋的挑战
  15. 注册免费使用腾讯云企业邮箱
  16. java 绘制图形实验心得体会_绘图实习心得体会3篇
  17. EasyUI下拉列表中实现输入框不可手动输入
  18. 程序员一小时赚50,这就是别人眼中的高薪职业
  19. 金山卓越网成立的商业计划书
  20. 小学计算机走进智慧城堡教案,新苏教版二年级下册数学《千以内数的初步认识》教案教学设计...

热门文章

  1. 【目标检测】YOLOv2 ,对YOLOv1的多种改进
  2. 自媒体人常用工具,你还不知道的快速保存无水印视频图片方法
  3. php上传的文件名乱码,php上传文件时文件名乱码怎么办
  4. 降低软件购置成本 实现系统集中部署 ——沟通CTBS平台上海工化院应用案例
  5. C++学习(四六六)Multiple parse contexts are available for this file
  6. Windows安装猕猴桃CDN
  7. HTTP请求常见错误码大全
  8. 第三方支付业务流程介绍
  9. 4款Windows必装的软件,免费又实用,让你的电脑无所不能
  10. 补全Windows10中的emoji 替换系统emoji字体