LA 4490 Help Bubu
题目链接: 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相关推荐
- uvaLive 4490 Help Bubu 帮助布布 等价转化+DP
等价转换: 从有n本书的书堆里面抽取k本书,再插入书堆里面,计算书的杂乱度 等价于 向空的书架上按给出的顺序放上n本书,再从中抽取k本书,然后插入书堆里面,计算书的杂乱度 等价于 向空的书架上按给出的 ...
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- WCDMA中的URA和LA/RA
1.关于URA的概念: URA(UTRAN Registration Area)是UTRAN内部区域的划分适用于UE处于RRC连接状态的情形,而且只能在UTRAN端使用(比如由UTRAN发起的寻呼). ...
- LA 5717枚举+最小生成树回路性质
1 /*LA 5717 2 <训练指南>P343 3 最小生成树的回路性质 4 在生成的最小生成树上,新增一条边e(u,v) 5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否 ...
- 编译php时错误make ***[libphp5.la] Error 1
错误信息 make ***[libphp5.la] Error 1 /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit statu ...
- 获取长度length_lab、labE、la、laE、ll、llE 钢筋锚固搭接长度6项参数的相互关系...
文|施工小诸葛 目录 01 相关概念 02 字母含义 03 lab 非抗震纵向受拉钢筋的基本锚固长度 04 la 非抗震纵向受拉钢筋的锚固长度 05 ll 非抗震纵向受拉钢筋搭接长 ...
- qu.la网站上的小说爬取
qu.la网站上的小说爬取 ##这个项目是我最早开始写的爬虫项目,代码比较简陋 在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
为什么80%的码农都做不了架构师?>>> Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序 ...
- 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 ...
- 2020年球云计算市值或将达4490亿欧元
据相关调查数据显示,由于云服务采用普及率的提高,2020年累计总收入预计达到4490亿欧元,达到欧盟28个成员国的国内生产总值. 根据在2014年12月到2016年4月间进行的调查报告显示,2015年 ...
最新文章
- python中文件读写位置的作用-Python中文件的读写、写读和追加写读三种模式的特点...
- python大佬养成计划----HTML网页设计一
- [编程题] 迷路的牛牛
- [转][Java]尝试解决Java多行字符串的编辑问题
- 【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息
- html svg 在线编辑器,用于矢量图形的SVG在线编辑器
- 小米原生浏览器标识.
- 软件测试简历项目经验该怎么写?【两年经验】
- ImageJ Merge荧光图片
- 2018 初入IT十年(上)----成为一名优秀的程序员
- Balanced Multimodal Learning via On-the-fly Gradient Modulation论文笔记
- 舰队collection服务器维护,舰娘百科 - 专业性的舰队Collection百科全书
- Onedrive如何申请免费的学生1T空间以及查看剩余空间大小
- openssh-7.5p1升级
- 手机没Root?你照样可以渗透路由器
- 公众号可改20个字 微信公众号改错字功能升级
- 6条网页设计配色原则
- Win 11 + RTX3060 的深度学习环境配置
- [about phd]读博=
- Linux SDIO WIFI Marvell8801/Marvell88w8801(八) --- Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍
热门文章
- 华为交换机 查ip冲突_交换机查找IP冲突
- java实现给图片添加水印(文字水印或图片水印)
- 医院子母钟系统-YZ-9200
- MATLAB之特征值和特征向量
- 基于MATLAB的特征值与特征向量(附完整代码)
- 打印机后台服务器修复,修复win10出现“本地打印后台处理程序服务没有运行”的方法...
- 《东周列国志》第二十五回 智荀息假途灭虢 穷百里饲牛拜相
- Java根据出生年月日计算年龄
- 南阳oj 韩信点兵
- java 基础: 一些稀奇古怪的好东西总结 丰富知识面