JZOJ1205. 帮助Bubu(2017.8B组)

Description

Bubu的书架乱成一团了!帮他一下吧!
他的书架上一共有n本书。我们定义混乱值是连续相同高度书本的段数。例如,如果书的高度是30,30,31,31,32,那么混乱值为3,30,32,32,31的混乱度也是3,但31,32,31,32,31的混乱度是5-这实在是太乱了。
Bubu想尽可能的减少混乱度,但他有点累了,所以他决定最多取出k本书,再随意将他们放到书架上。你能帮助他吗?

Input

最多会有20组测试数据。每组测试数据开头为两个整数n,k(1<=k<=n<=100),表示总共有n本书,最多可以进行k次搬书操作。接下来一行有n个整数,表示每本书的高度,从左到右。每本书的高度是25到32间的整数。最后一组数据后有一行n=k=0。

Output

对于每一组数据,输出Case标号和最终最小的混乱度。在每组数据后打印一个空行。

Sample Input

5 2
25 25 32 32 25
5 1
25 26 25 26 25
0 0

Sample Output

Case 1: 2

Case 2: 3
想法:
a[i]范围小,每个先减24
设f[i][j][k][l]为前i本书,抽走了j本书,前i本没有抽走的书状态为j,最后一本没有抽走的书高度为k
若抽掉第i+1本:f[i+1,j+1,k,l]=min(f[i,j,k,l])
若不抽:f[i+1,j,k or 2^a[i+1],a[i+1]]=min(f[i,j,k,l]+p) 若a[i+1]!=l,那么p=1否则=0
设sum表示原数组中出现过的高度的状态
设b[i]表示i在二进制下1的个数(可预处理)
答案=min(f[n,i,j,k]+b[sum-j]) (为什么+b?因为之前抽了一些书,要放回去,如果大书架没有这个高度,那么答案+1,否则就插到相同高度那里)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值