题目链接: LA 4490 Help Bubu

题目大意: 你有n(n≤100)n(n\leq100)n(n≤100)本书,每本书高度为hi(25≤hi≤32)h_i(25\leq h_i\leq32)hi​(25≤hi​≤32)你需要从中拿出kkk本书,然后重新放回任意位置,并保证剩余的n−kn-kn−k本书的相对位置保持不变,我们把相邻且高度相同的书看成一个片段,定义混乱程度为片段的个数,问如何操作使得最终所有书的混乱程度最小

题目分析: 我们发现hih_ihi​的范围很小,因此考虑状压,dp[i][j][k][w]dp[i][j][k][w]dp[i][j][k][w]表示操作到第iii本书,往外拿了jjj本,现在已经有了的高度的状态为kkk(状压),上一本书的高度是www,最后我们考虑在已经取到第nnn本书的时候,所有可能的状态下被拿出来的书对答案的影响,很显然只有在这本书的高度没有出现过,才会对答案产生影响,否则直接插入到已有的高度序列中即可。最后考虑空间是28∗8∗n∗k2^8*8*n*k28∗8∗n∗k会爆掉,因此用滚动数组滚调一维。

题目代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#define inf 0x7f7f7f7f
using namespace std;
int dp[2][105][1<<9][10],book[105];
int work(int x){int cnt=0;while(x){cnt+=x&1;x>>=1;}return cnt;
}
int main()
{int n,m,kase=0;while(scanf("%d %d",&n,&m)&&(n+m)){int all=0,pre=1,now=0;int maxh=0;for(int i=1;i<=n;i++){scanf("%d",&book[i]);book[i]-=24;all|=(1<<book[i]);maxh=max(maxh,book[i]);}memset(dp[0],0x3f,sizeof(dp[0]));//滚动数组,now=0是第一个相当于i=1dp[0][0][(1<<book[1])][book[1]]=1;dp[0][1][0][0]=0;//找一个不存在的值表示前面没有书的时候的状态 for(int i=1;i<n;i++){pre^=1;now^=1;memset(dp[now],0x3f,sizeof(dp[now]));for(int j=0;j<=m;j++){for(int k=0;k<=all;k++){for(int w=0;w<=maxh;w++){if(dp[pre][j][k][w]>=inf)continue;dp[now][j][k|(1<<book[i+1])][book[i+1]]=min(dp[now][j][k|(1<<book[i+1])][book[i+1]],dp[pre][j][k][w]+(w==book[i+1]?0:1));dp[now][j+1][k][w]=min(dp[now][j][k][w],dp[pre][j][k][w]);}}}}int ans=inf;for(int i=1;i<=m;i++)for(int j=0;j<=all;j++)for(int k=0;k<=maxh;k++)ans=min(ans,dp[now][i][j][k]+work(all^j));printf("Case %d: %d\n\n",++kase,ans);}return 0;
}

LA 4490 Help Bubu相关推荐

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

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

  2. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  3. WCDMA中的URA和LA/RA

    1.关于URA的概念: URA(UTRAN Registration Area)是UTRAN内部区域的划分适用于UE处于RRC连接状态的情形,而且只能在UTRAN端使用(比如由UTRAN发起的寻呼). ...

  4. LA 5717枚举+最小生成树回路性质

    1 /*LA 5717 2 <训练指南>P343 3 最小生成树的回路性质 4 在生成的最小生成树上,新增一条边e(u,v) 5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否 ...

  5. 编译php时错误make ***[libphp5.la] Error 1

    错误信息 make ***[libphp5.la] Error 1 /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit statu ...

  6. 获取长度length_lab、labE、la、laE、ll、llE 钢筋锚固搭接长度6项参数的相互关系...

    文|施工小诸葛 目录 01   相关概念 02   字母含义 03   lab 非抗震纵向受拉钢筋的基本锚固长度 04   la 非抗震纵向受拉钢筋的锚固长度 05   ll 非抗震纵向受拉钢筋搭接长 ...

  7. qu.la网站上的小说爬取

    qu.la网站上的小说爬取 ##这个项目是我最早开始写的爬虫项目,代码比较简陋 在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python ...

  8. Linux中的动态库和静态库(.a/.la/.so/.o)

    为什么80%的码农都做不了架构师?>>>    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序 ...

  9. Android 解决 No static method in class La/a/a/a; or its super classes

    错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawab ...

  10. 2020年球云计算市值或将达4490亿欧元

    据相关调查数据显示,由于云服务采用普及率的提高,2020年累计总收入预计达到4490亿欧元,达到欧盟28个成员国的国内生产总值. 根据在2014年12月到2016年4月间进行的调查报告显示,2015年 ...

最新文章

  1. python中文件读写位置的作用-Python中文件的读写、写读和追加写读三种模式的特点...
  2. python大佬养成计划----HTML网页设计一
  3. [编程题] 迷路的牛牛
  4. [转][Java]尝试解决Java多行字符串的编辑问题
  5. 【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息
  6. html svg 在线编辑器,用于矢量图形的SVG在线编辑器
  7. 小米原生浏览器标识.
  8. 软件测试简历项目经验该怎么写?【两年经验】
  9. ImageJ Merge荧光图片
  10. 2018 初入IT十年(上)----成为一名优秀的程序员
  11. Balanced Multimodal Learning via On-the-fly Gradient Modulation论文笔记
  12. 舰队collection服务器维护,舰娘百科 - 专业性的舰队Collection百科全书
  13. Onedrive如何申请免费的学生1T空间以及查看剩余空间大小
  14. openssh-7.5p1升级
  15. 手机没Root?你照样可以渗透路由器
  16. 公众号可改20个字 微信公众号改错字功能升级
  17. 6条网页设计配色原则
  18. Win 11 + RTX3060 的深度学习环境配置
  19. [about phd]读博=
  20. Linux SDIO WIFI Marvell8801/Marvell88w8801(八) --- Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍

热门文章

  1. 华为交换机 查ip冲突_交换机查找IP冲突
  2. java实现给图片添加水印(文字水印或图片水印)
  3. 医院子母钟系统-YZ-9200
  4. MATLAB之特征值和特征向量
  5. 基于MATLAB的特征值与特征向量(附完整代码)
  6. 打印机后台服务器修复,修复win10出现“本地打印后台处理程序服务没有运行”的方法...
  7. 《东周列国志》第二十五回 智荀息假途灭虢 穷百里饲牛拜相
  8. Java根据出生年月日计算年龄
  9. 南阳oj 韩信点兵
  10. java 基础: 一些稀奇古怪的好东西总结 丰富知识面