传送门

题目大意

有n本书,最多k次操作,每次操作可以把一本书拿出来,放到一个位置去,有一个指标较mess度,他是书的高度的段数,连续的书高度一样算一段,现在给你最先开始各个位置上的书的高度,求操作后最小的mess度。

分析

首先我们要注意一个非常非常重要的条件就是书的高度的范围很小。所以我们不由想到了状压dp。我们再仔细思考一下不难想到dp[i][j][msk][k]表示考虑到第i本,挪动了j次,没挪动的书的高度集合为msk,没挪动的书的最后一本高度为k。然后我们便可以转移(具体见代码),而最后答案要将dp值加上对于所有高度为h的书都挪动了的不同h的数量。注意数组不要开小啦。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define gm(x,y) x=min(x,y)
const int inf = 0x3f3f3f3f;
int n,m,sum,dp[2][105][260][10],apr[50],c[105],cse,now;
inline void init(){memset(apr,0,sizeof(apr));sum=0;cse++;
}
inline void deal(int pl,int x){if(!apr[x]){sum++;apr[x]=sum;}c[pl]=apr[x];return;
}
inline int Sum(int msk){int res=0;for(int i=0;i<sum;i++)if(((1<<i)&msk)==0)res++;return res;
}
inline void DP(){int i,j,k,s;now=1;memset(dp[1],0x3f,sizeof(dp[1]));dp[1][0][(1<<(c[1]-1))][c[1]]=1;dp[1][1][0][0]=0;for(i=1;i<n;i++){now^=1;memset(dp[now],0x3f,sizeof(dp[now]));for(j=0;j<=m;j++)for(s=0;s<(1<<sum);s++)for(k=0;k<=sum;k++)if(dp[now^1][j][s][k]<inf){//cout<<i<<' '<<j<<' '<<s<<' '<<k<<' '<<dp[now^1][j][s][k]<<endl;if(k==c[i+1])gm(dp[now][j][s][k],dp[now^1][j][s][k]);else gm(dp[now][j][s|(1<<(c[i+1]-1))][c[i+1]],dp[now^1][j][s][k]+1);if(j<m)gm(dp[now][j+1][s][k],dp[now^1][j][s][k]);}}return;
}
inline void getans(){int ans=inf,i,j,k;for(i=0;i<=m;i++)for(j=0;j<(1<<sum);j++)for(k=1;k<=sum;k++)gm(ans,dp[now][i][j][k]+Sum(j));printf("Case %d: %d\n\n",cse,ans);
}
int main(){int i,j,k;cse=0;scanf("%d%d",&n,&m);while(n&&m){init();for(i=1;i<=n;i++){scanf("%d",&c[i]);deal(i,c[i]);}DP();getans();scanf("%d%d",&n,&m);}return 0;
}

转载于:https://www.cnblogs.com/yzxverygood/p/9483808.html

Help Bubu UVALive - 4490相关推荐

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

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

  2. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  3. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...

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

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

  5. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset

    UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...

  6. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  7. 逆序数 UVALive 6508 Permutation Graphs

    题目传送门 1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求 ...

  8. Infinite Fraction Path UVALive - 8207

    Infinite Fraction Path UVALive - 8207 题意: 给你n个数,每个数在0到9之间,每个数的下标一次是0~n-1,然后他所能走到的数为(i^2+1)%n,i为他本身的下 ...

  9. F - Heron and His Triangle UVALive - 8206

    F - Heron and His Triangle UVALive - 8206 题意: 给你应该n,然后求一个最小的t,问长度为t-1,t,t+1所组成的三角形的面积为整数,t>=n 题解: ...

  10. Tree UVALive - 8212

    Tree UVALive - 8212 题意: 有n个点,k个颜色,每个点都要被染色,相同颜色之间的边算是被该颜色覆盖,问有多少边被所有颜色覆盖 题解: 题目给的是无根树,我们可以将1默认为根然后求所 ...

最新文章

  1. 二元函数泰勒公式例题_考研数一对二元函数的二阶泰勒公式的要求是了解,那我们要了解到什么程度呢?会出那种类型的题呢?...
  2. 液晶显示原理与ILI9341的使用
  3. C 一个非递减数组 下标从0到n 元素的取值范围为从0到n的整数 判断其中是否有重复元素
  4. [J2ME] Signing a midlet suite的讨论稿[Update]
  5. html title 不显示_第2天:HTML 结构
  6. angular 创建服务器_使用D3和Angular创建通用的可视化
  7. mysql union all 别名_mysql union 与 union all 语法及用法
  8. _id随机的 es_es 的数据操作
  9. java邮箱格式_JavaMail入门:创建纯文本、HTML格式的邮件
  10. dl360 g7安装linux,HPDL360G7服务器安装说明.ppt
  11. 讯飞输入法将深度神经网络DNN技术应用于语音识别达到业界领先水平
  12. HandlerThread使用
  13. 兔子问题or斐波那契数列
  14. Qt学习笔记-更高级的文本编辑器-完善第一版-gif动画
  15. 更新CocoaPods1.1.0碰到的问题及知识点
  16. 央视推荐的护眼台灯是什么牌子?教育照明灯具品牌
  17. dosbox编译c语言,DOSBOX的简单使用
  18. gridview的sort_asp.net GridView排序简单实现
  19. 阿里云新优惠活动,幸运券免费领取
  20. 学习编程需要什么基础

热门文章

  1. NOIP模拟题17.9.26
  2. hive大作业-餐饮外卖平台数据分析
  3. 电脑开机加速,一下子就提升了20几秒
  4. 【华人学者风采】聂建云 蒙特利尔大学
  5. 爬虫---数据的提取
  6. 常见的两种解空间 全排列与幂集
  7. feedburner怎么用_在FeedSky和FeedBurner中无缝切换
  8. 移动交互提示语设计(转)
  9. 黑群晖docker清理缓存_嘿群辉 篇五:群辉docker迁移磁盘
  10. 程序开发者的10大开源网站