图片加载可能有点慢,请跳过题面先看题解,谢谢

首先我们很容易注意到一件事情:\(h\) \(\epsilon\) {\(25,26,27,28,29,30,31,32\)},数一下,\(8\)个数,上状压
设状态 \(f[i][j][s][g]\) 为,处理到第 \(i\) 本书,抽掉了$ j$ 本,剩余书的状态为 \(s\) (一个二进制数),最后一本放 \(g\) 的最小步数
我们分三种情况转移:

  1. 第 \(i\) 本和第 \(i-1\) 本相同,则有:\(f[i][j][s][g]=min(f[i-1][j][s][g])\);
  2. 第 \(i\) 本和第 \(i-1\) 本不同,且抽掉第 \(i\) 本,则有:\(f[i][j+1][s][g]=min(f[i-1][j][s][g])\);
  3. 第 \(i\) 本和第 \(i-1\) 本不同,且不抽掉第 \(i\) 本,则有:\(f[i][j][s|(1<<(a[i]-25))][a[i]-25]=min(f[i-1][j][s][g]+1)\);

其中,\((1<<g)\leq s\),\(s\) \(\epsilon\) \(S\),\(S\) 为当前所有出现过的书的状态,\(s\) 可以通过枚举 \(S\) 的子集得到
当然,第一维可以滚一维,节省空间,也可以节省 \(memset\) 的时间
最后答案就是 \(min(f[n][j][s][g]+calc(S\) ^ \(s))\),\(calc(S\) ^ \(s)\) 为 \(S\) ^ \(s\) 中 \(1\) 的个数

//made by Hero_of_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define inf (0x3f3f3f3f)
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }int S,x,t;
int n,k,f[110][110][1<<8][10];il void init(){ S=0; memset(f,0x3f,sizeof(f)); }il int min(int &a,int b){return a=a<b?a:b;}
il int calc(int c){ return (!c)?0:calc(c/2)+(c%2); }il void work(){for(int i=1;i<=n;i++){scanf("%d",&x); x-=25;f[i][i-1][1<<x][x]=1;for(int j=0;j<=min(i-1,k);j++)for(int s=S;s;s=(s-1)&S)for(int g=0;(1<<g)<=s;g++)if(f[i-1][j][s][g]!=inf){int y=f[i-1][j][s][g];if(g==x) min(f[i][j][s][g],y);else{min(f[i][j+1][s][g],y);min(f[i][j][s|(1<<x)][x],y+1);}}S|=(1<<x);}int ans=inf;for(int j=0;j<=k;j++)for(int s=S;s;s=(s-1)&S)for(int g=0;(1<<g)<=s;g++)if(f[n][j][s][g]!=inf)ans=min(ans,f[n][j][s][g]+calc(S^s));printf("Case %d: %d\n\n",++t,ans);
}int main(){ while(scanf("%d%d",&n,&k)&&n){ init(); work(); } return 0; }

转载于:https://www.cnblogs.com/Hero-of-someone/p/7671242.html

[UVALive 4490] Help Bubu相关推荐

  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. php 实现 html转js
  2. Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1
  3. ROS调用本地摄像头数据并在rviz里显示
  4. Codeforces 1286C/1287E Madhouse (交互题)
  5. 为了OFFER,我加深学习,搞懂了栈
  6. 《数据库SQL实战》查找所有已经分配部门的员工的last_name和first_name
  7. 图片适应窗口_在word中插入图片,如何避免失真模糊?实用文档建议收藏
  8. 今天在看慕课网的java学习路径
  9. 360浏览器打不开网页_苹果移动端、PC端safari浏览器打不开网页的解决方案!
  10. 网易云api及 asrsea 加密参数文档
  11. 浏览器设备信息UserAgent查询
  12. Extjs ComboBox常用的配置
  13. C题:无线充电电动小车(本科)--2018年TI杯大学生电子设计竞赛
  14. macOS远程管理linux,MacOS远程控制工具
  15. 【题解】[LuoguP3503]「BZOJ2086」[POI2010] Blocks
  16. Linux下文件压缩、打包,看这一篇就够了
  17. 台式低速常温离心机S400操作规程
  18. Web前端基础体验学习过程1 HTML篇
  19. python中常用于输出信息的语句函数是print括号_第十四课我们研究一下常用的print()函数,翻看了一下Python宝典...
  20. mysql血缘 表级血缘 字段级血缘GUDU GSP,JSQL PARSER,ANTLR MYSQL,DRUID

热门文章

  1. 国资委定调联通电信前景:“共享竞合”的铁塔模式翻版
  2. 计算机如何切换显卡,Win7系统双显卡怎么切换独立显卡?电脑双显卡切换方法...
  3. css字间距 与 Photoshop里字间距关系
  4. 程序人生之三:从新手到项目管理,五年程序人生路
  5. visio 画箭头_visio2013中画箭头的具体操作步骤
  6. matlab从无到有系列(八):M文件及函数的编写
  7. 百度wz竞价推广关键词排名的影响因素大全
  8. ADS1115 应用指导
  9. 毕设论文-word格式问题
  10. 一元云购系统接入手机短信功能说明【V3版】