题目描述

Bubu的书架乱成一团了!帮他一下吧!

他的书架上一共有n本书。我们定义混乱值是连续相同高度书本的段数。例如,如果书的高度是30,30,31,31,32,那么混乱值为3,30,32,32,31的混乱度也是3,但31,32,31,32,31的混乱度是5-,这实在是太乱了。

Bubu想尽可能地减少混乱度,但他有点累了,所以他决定最多取出k本书,再随意将它们放到书架上。你能帮助他吗?

输入格式

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

输出格式

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

输入输出样例

输入 #1
    5 2
25 25 32 32 25
5 1
25 26 25 26 25
0 0
输出 #1
    Case 1:2
Case 2:3
分析:
本题给定的数据显然让我们想到状态压缩DP,那么我们可以设计状态f[i][j][s][l],表示前i个选了j个状态为s最后一个为l所能得到最小的混乱度,然后进行状态转移即可。
然后发现我的代码最后一个点超时,死活过不去。。。所以我开了O2。。。
CODE:
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int M=;
const int N=;
int f[][M][N][];
int a[M],b[N];
int n,k,cnt;
int get(){
char c=getchar();
int res=,f=;
while (c>''||c<''){
if (c=='-') f=-;
c=getchar();
}
while (c<=''&&c>=''){
res=(res<<)+(res<<)+c-'';
c=getchar();
}
return res*f;
}
int main(){
for(int i=;i<(<<);i++){
b[i]=;
for(int j=;j<;j++)
if(i&(<<j)) b[i]++;
}
while(~scanf("%d%d",&n,&k)&&(n+k)){
int S=,maxn=;
for(int i=;i<=n;i++){
a[i]=get();
a[i]-=;
S=S|(<<a[i]);
maxn=max(maxn,a[i]);
}
maxn++;
memset(f[],,sizeof(f[]));
f[][][][maxn]=;
f[][][(<<a[])][a[]]=;
int cur=,pre=;
for(int i=;i<n;i++){
cur=pre^;
memset(f[cur],,sizeof(f[cur]));
for(int j=;j<=k;j++){
for(int s=;s<=S;s++){
for(int l=;l<=maxn;l++){
if(f[pre][j][s][l]==) continue;
f[cur][j][s|(<<a[i+])][a[i+]]=min(f[cur][j][s|(<<a[i+])][a[i+]],f[pre][j][s][l]+(a[i+]==l?:));
f[cur][j+][s][l]=min(f[cur][j][s][l],f[pre][j][s][l]);
}
}
}
pre=cur;
}
int ans=;
for(int j=;j<=k;j++){
for(int s=;s<=S;s++){
for(int l=;l<maxn;l++){
if(f[cur][j][s][l]==)continue;
int now=S^s;
ans=min(ans,f[cur][j][s][l]+b[now]);
}
}
}
printf("Case %d: %d\n\n",++cnt,ans);
}
return ;
}

帮助_NOI导刊2010提高(03)的更多相关文章

  1. 洛谷 P1777 帮助_NOI导刊2010提高(03) 解题报告

    P1777 帮助_NOI导刊2010提高(03) 题目描述 Bubu的书架乱成一团了!帮他一下吧! 他的书架上一共有n本书.我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31 ...

  2. 洛谷P1774 最接近神的人_NOI导刊2010提高(02) [2017年6月计划 线段树03]

    P1774 最接近神的人_NOI导刊2010提高(02) 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门 ...

  3. P1799 数列_NOI导刊2010提高(06)

    P1799 数列_NOI导刊2010提高(06)f[i][j]表示前i个数删去j个数得到的最大价值.if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); else ...

  4. P1771 方程的解_NOI导刊2010提高(01)

    P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...

  5. 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)

    [题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...

  6. P1776 宝物筛选_NOI导刊2010提高(02)&& 多重背包二进制优化

    多重背包, 要求 \(N\log N\) 复杂度 Solution 众所周和, \(1-N\) 之内的任何数可以由 \(2^{0}, 2^{1}, 2^{2} ... 2^{\log N}, N - ...

  7. P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  8. Luogu P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  9. P1794 装备运输_NOI导刊2010提高(04)

    P1794 装备运输_NOI导刊2010提高(04) 题目描述 德国放松对英国的进攻后,把矛头指向了东边——苏联.1943年初,东线的战斗进行到白热化阶段.据可靠情报,90余万德国军队在库尔斯克准备发 ...

  10. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

随机推荐

  1. 【问题解决方案】GitHub的md中使用库中图片

    参考链接: 在GitHub中使用图片功能 步骤: 在github上的仓库建立一个存放图片的文件夹,文件夹名字随意.如:image 将需要在插入到文本中的图片,push到image文件夹中. 然后打开g ...

  2. Cheatsheet: 2019 03.01 ~ 04.30

    Golang How To Install Go and Set Up a Local Programming Environment on macOS Build A Go API 40+ prac ...

  3. smbcontrol - 向smbd或nmbd进程发送消息

    总览smbcontrol [ -i ] smbcontrol [ 目标 ] [ 消息类型 ] [ 参数 ] 描述这个工具是是Samba组件的一部分. smbcontrol是个很小的程序,用它可以向系统 ...

  4. 295-Xilinx Kintex-7 X7K325T的半高PCIe x4双路万兆光纤收发卡

    Xilinx Kintex-7 X7K325T的半高PCIe x4双路万兆光纤收发卡 一.板卡概述       本板卡系我公司自主研发,采用Xilinx公司的XC7K325T-2FFG676I芯片作为 ...

  5. 164-基于TI DSP TMS320C6455和Altera FPGA EP2S130的Full CameraLink PDS150接口板卡

    一.板卡概述 本板卡由我公司自主研发,板卡采用DSP+FPGA的结构,DSP使用TMS320C6455芯片,FPGA采用ALTERA的高端FPGA芯片Stratix II EP2S系列EP2S130, ...

  6. 环境管理 pipenv 的 使用

    安装 pip3 install pipenv 配置 配置 环境变量 WORKON_HOME , 表示 生成的虚拟环境 文件 的 存放位置 创建虚拟环境 方式一 pipenv --python 3.7 ...

  7. ConcurrentLinkedDeque

    import java.util.concurrent.ConcurrentLinkedDeque; /** * ConcurrentLinkedQueue : 是一个适用于高并发场景下的队列,通过无 ...

  8. spark streaming简单示例

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  9. TCP/IP协议 和 如何实现 互联网上点对点的通信

    1.参考:https://www.cnblogs.com/onepixel/p/7092302.html   TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层 和 链路层   http 属 ...

  10. 使用juqery-ui完成联想查询功能

    最近公司的项目有个需求,需要使用联想查询功能.就是一个文本输入框,在输入的时候获取值去后端模糊查询然后按照列表显示在下面.效果如下图: 经过搜索找到这个插件,查阅资料可以完成这个功能,即可以实现静态数 ...