题意:书架上有n本书,每一本书都有一个高度,因此我们可以得到一个长度为n的高度序列,我们把相邻高度的书看成一个片段,定义该书架的混乱程度为片段的个数

例如序列 30 30 31 31 32的混乱程度为3

为了整理书架你最多可以拿出m本书,然后把它们插回书架的任意一个地方,请你求出最小的混乱程度

1<=k<=n<=100,25<=hi<=32

观察高度的范围我们很容易想到是一个状态压缩动规,难点就在于写出状态

在我的博客中有一道类似的题“color stones”,来源于poj,这道题其实就是“color stones”的加强版

f[i][j][s0][k]表示当前讨论到第i本书,且此时已经拿出了j本,书的高度集合为s0且序列中最后一本书高度为k的最小混乱值,设第i个书的高度为x

有两种决策:

不拿出第i本:f[i][j][s0|(1<<x)][x]=min{f[i-1][j][s0][k]+(k!=x)}

拿出第i本: f[i][j+1][s0][k]=min{f[i-1][j][s0][k]}

这个f数组的第一维可以滚一下

然后就讨论答案的最小值,因为我们s0表示的留下的书的种类,那么最后的答案就是min{f[n][j][s0][last]+bitcnt(all^ s0)),all为总的种类,(all^s0)为拿走的书里面的种类减去留下的书有的种类,拿走的书再放进来肯定是每个种类一个段,如果留下来的有这个种类,肯定是插进去,不算段数,没有的那些每个种类都+1。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=105,maxm=1<<9;
const int inf=0x3f3f3f3f;
int f[2][maxn][maxm][9],all,n,m,kase;
int bitcnt(int s){return s==0?0:bitcnt(s>>1)+(s&1);}
int main(){while(scanf("%d%d",&n,&m)&&n+m){int i,j,k,x,s0;all=0;memset(f,inf,sizeof(f));for(i=1;i<=n;i++){scanf("%d",&x);x-=25;memset(f[i&1],inf,sizeof(f[i&1]));f[i&1][i-1][1<<x][x]=1; for(j=0;j<=min(m,i);j++){for(s0=all;s0;s0=(s0-1)&all)for(k=0;k<=8;k++)if(s0&(1<<k)){f[i&1][j][s0|(1<<x)][x]=min(f[i&1][j][s0|(1<<x)][x],f[(i-1)&1][j][s0][k]+ (k!=x));f[i&1][j+1][s0][k]=min(f[i&1][j+1][s0][k],f[(i-1)&1][j][s0][k]); }}all|=(1<<x);    }int ans=inf;for(i=0;i<=m;i++)for(s0=all;s0;s0=(s0-1)&all)for(k=0;k<=8;k++)if(s0&(1<<k))ans=min(ans,f[n&1][i][s0][k]+bitcnt(s0^all));printf("Case %d: %d\n\n",++kase,ans);}
}

Live archive 4490 Help Bubu相关推荐

  1. uvaLive 4490 Help Bubu 帮助布布 等价转化+DP

    等价转换: 从有n本书的书堆里面抽取k本书,再插入书堆里面,计算书的杂乱度 等价于 向空的书架上按给出的顺序放上n本书,再从中抽取k本书,然后插入书堆里面,计算书的杂乱度 等价于 向空的书架上按给出的 ...

  2. mysql 表引擎无法更新_Mysql安装archive引擎更新表引擎

    1,在mysql命令行中安装Archive引擎 1,查找mysql plugins lib目录,看目录中是否存在Archive的so; mysql > show variables like'p ...

  3. ubuntu package XXX needs to be reinstalled,but I can't find an archive 问题修复

    ubuntu package XXX needs to be reinstalled, but I can't find an archive 修复 原文连接: https://blog.csdn.n ...

  4. 关于mysql archive存储引擎-专门存储审计和日志数据

    来源:http://60.29.242.49/?p=60 政府还有一个让数据库专家摊上更多事情的职能,就是安全控制和数据审计. 那些管理着海量数据仓库的企业官员常常得回答诸如"何人何时修改了 ...

  5. iOS 命令行自动打包 (archive)

    原文链接:http://www.jianshu.com/p/2247f76404eb iOS 开发工程师在测试修复 bug 的过程中,一般会存在频繁打包的情况,如果一步步在 xcode 中点击 arc ...

  6. alter system switch logfile与alter system archive log current的区别

    以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换, ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例 ...

  7. xcode4发布测试-打包(Archive)

    摘自:xcode4发布测试-打包 xcode4发布测试-打包(Archive),官方文档有误 转自"我os"的新浪博客,iOS程序发布测试4-打包(Archive)发布(share ...

  8. tar: Cowardly refusing to create an empty archive 问题

    在解压 .tar.gz文件的时候遇到了这个解压的问题. 原命令:tar -zcvf ···.tar.gz 提示:tar: Cowardly refusing to create an empty ar ...

  9. .pth is a zip archive (did you mean to use torch.jit.load()?)

    RuntimeError: bert.pth is a zip archive (did you mean to use torch.jit.load()?) .pth is a zip archiv ...

  10. http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html

    http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html

最新文章

  1. php函数表达式,正规表达式函数_php
  2. 计算机动漫设计VR主要学什么,动漫设计专业学什么 要学什么软件
  3. 处理网络请求qs、图片转base64的优劣
  4. python元组赋值给变量,Python的赋值
  5. JVM 堆内存设置原理
  6. 安全领域多位世界级权威的智慧结晶——《黑客新型攻击防范:深入剖析犯罪软件》...
  7. Windows phone 7应用之代码性能分析工具——Profile.
  8. autojs toast 可以改变字体颜色吗_喃喃札记 | 你真的需要一部pad做笔记吗?
  9. 如何查询Linux服务的作用
  10. 俄罗斯政府称“主权网络”测试成功
  11. WPF多线程更新UI的一个解决途径
  12. TextToSpeech文本转语音,从开始说话到结束的监听
  13. 端口扫描工具masscan常用方法和参数
  14. wmic java_wmic 命令用法及实例
  15. 路由器,交换机和猫的区别
  16. 2021.11_Coggle组队学习_Linux命令
  17. 杭电2022 海选女主角
  18. 使用函数求余弦函数的近似值 (15 分)
  19. php计算问卷分数,php 问卷调查结果统计
  20. Google Earth Engine(GEE)——GEE版本的全球森林火灾信息获取并呈现2001-2020年四川省火灾亮度时间序列分析

热门文章

  1. 网络前沿技术期末考题盘点
  2. 共线性分析软件MCScanX安装、报错解决方法及使用
  3. 【证明】欧拉公式(泰勒展开)
  4. Centos7.5软硬件、IP地址及主机名称配置详细教程
  5. MATLAB音频数字水印算法实现
  6. 2017计算机知识竞赛题,2017网络安全知识竞赛题库(中学组)word版
  7. win7开机密码_win7忘记开机密码怎样才能打开电脑?别再用那些错误的方法了
  8. 普京任命卡德罗夫为车臣总统
  9. Android或者是IOS/普通屏全面屏及qq浏览器和qq内置浏览器判断
  10. 相对url和相对路径