等价转换:

从有n本书的书堆里面抽取k本书,再插入书堆里面,计算书的杂乱度

等价于

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

等价于

向空的书架上按给出的顺序放上n-k本书,然后再放上k本书,想放哪放哪,计算书的杂乱度。

显然第一阶段放n-k本书,就是一个简单的背包+集合动态规划。

对于每一本书,可以选也可以不选。

dp[ind][v][last][s]表示考虑了前面ind本书,其中有v本没有放进去,last表示最后一本的高度,s表示选取了哪些高度的

书。

第二阶段:

对于没有放进去的书,如果书架中已经有与之高度相同的书,那么放到那本书旁边,杂乱度不变。

如果没有,随便放,但要求:和它同高度没放进去的书要和它放在一起,杂乱度+1。

/**==========================================*   This is a solution for ACM/ICPC problem**   @source:uvaLive 4490 - Help Bubu (Wuhan 2009)*   @type:  dp*   @author: wust_ysk*   @blog:  http://blog.csdn.net/yskyskyer123*   @email: 2530094312@qq.com*===========================================*/
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define REP(i,n)  for(int i=0 ;i<(n) ;i++)
#define ysk(x)  (1<<(x))
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int maxn= 100   ;int n,V,all,kase=0;
int h[maxn+5];
const int N=8;
const int ed=ysk(N)-1;
int dp[2][N+2][maxn+5][ed+3];//[当前阶段][最后一个是谁][几个没选][选了哪些种];int cal(int s)
{int ans=0;for(int i=0;i<N;i++) if(all&ysk(i)){int x=s&ysk(i);int y=all&ysk(i);ans+=  x^y?1:0;//我艹,当初写成了x^y,wa了好多发}return ans;
}void update(int & ans ,int ret)
{if(ans<0||ret<ans)  ans=ret;
}
void work()
{memset(dp,-1,sizeof dp);int now=0,pre=1;dp[now][0][0][0]=0;for(int i=1;i<=n;i++){now^=1;pre^=1;for(int last=0;last<=N;last++) if(!last || all&ysk(last-1)) //最后一个是谁{for(int v=0;v<=V;v++ )//几个没选{for(int s=0;s<=ed;s++)  if(~dp[pre][last][v][s])//选了哪些种{int x=h[i]-25;if(v+1<=V){update(dp[now][last][v+1][s],dp[pre][last][v][s]  );}int ret= (last==x+1) ?dp[pre][last][v][s]:dp[pre][last][v][s]+1;update( dp[now][x+1][v][s|ysk(x)],ret   );}}}memset(dp[pre],-1,sizeof dp[pre]);//}int ans=n;for(int last=0;last<=N;last++) if(!last || all&ysk(last-1)){for(int v=0;v<=V;v++){for(int s=0;s<=ed;s++) if(~dp[now][last][v][s]){ans=min(ans,cal(s)+dp[now][last][v][s]);}}}printf("Case %d: %d\n\n",++kase,ans);}
int main()
{while(~scanf("%d%d",&n,&V)&&(n||V)){all=0;for(int i=1;i<=n;i++){scanf("%d",&h[i]);all|= ysk(h[i]-25);}work();}return 0;
}

uvaLive 4490 Help Bubu 帮助布布 等价转化+DP相关推荐

  1. 深圳大学计算机图形学实验一——OpenGL绘制布布头像

    尝试利用OpenGL绘制一些可爱的表情包. 一二布布是较为流行的一套萌系表情包.我选择绘制一二布布系列的一张表情包.这张表情包描绘了趴在窗户上的一只小棕熊布布. 表情包印在手机壳的样例如下: 头的绘制 ...

  2. 基于Android幼儿识字软件,布布识字软件(幼儿识字)

    布布识字软件(幼儿识字)是一款专门为用户提供的学习汉字的手机应用软件,用户不仅可以让自己的孩子从中学习到汉字的书写笔画,还能通过各种汉字故事.动画以及游戏等方式进行学习 软件特色: 采用汉字思维体系, ...

  3. 运放全波整流电路_布布熊:整流一般采用桥式电路?我却用运放实现了全波精密整流...

    点击上面"卧龙会IT技术"关注我们 如果看到我们文章第二次了,该关注了 原创 | 卧龙会  布布熊 今天是我们卧龙会布布熊大侠来分享一个用运放设计全波整流电路.喜欢的,支持布布熊的 ...

  4. 计算机模拟贝特朗奇论,由贝特朗奇论谈几何概型中的等价转化

    <由贝特朗奇论谈几何概型中的等价转化>由会员分享,可在线阅读,更多相关<由贝特朗奇论谈几何概型中的等价转化(9页珍藏版)>请在人人文库网上搜索. 1.由贝特朗奇论谈几何概型中的 ...

  5. 布布百度收录批量查询软件【高速引擎】

  6. UVALive 3942 Remember the Word(字典树+DP)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. Python中的石头、剪刀、布游戏

    题目要求: 1.从控制台输入要出的拳 -石头(1)/剪刀(2)/布(3) 2.电脑随即出拳–先假定电脑只会出石头,完成整体代码功能 3.比较胜负 石头 胜 剪刀 剪刀 胜 布 布 胜 石头 代码: i ...

  8. python--石头剪刀布游戏(列表)

    本使用了下面几篇文章的知识: python(8)--列表·初阶使用_码银的博客-CSDN博客 python(7)--if语句_码银的博客-CSDN博客 一.学习目标 利用列表实现石头剪刀布游戏 二.实 ...

  9. 洗布草标签对于服装、工业洗涤的应用方案

    洗布草标签的应用背景 专业洗衣公司每年处理数以上万计的工作服,布草制品.面临整个换洗的运送.洗涤.熨烫.整理和送还的过程,单靠传统人工清点统计已不能满足行业所需.如何缩减布布草清洗的整个时间周期,明确 ...

最新文章

  1. 网络IO模型的深入浅出
  2. 如何使用Scala的ClassTag
  3. ElasticSearch之集群原理
  4. Redis Server Memory Optimization
  5. 20155225 实验三《敏捷开发与XP实践》实验报告
  6. 用户研究,你还在“凭感觉”吗?
  7. 面向对象3(final、static、instanceof、向上/向下转型、初始化次序)
  8. 进程和线程计算机组成原理面试题,2016年云南财经大学信息学院计算机组成原理复试笔试最后押题五套卷...
  9. 玫曦音乐播放器开源源码
  10. Python稳基修炼的经典案例7(计算机二级、初学者必须掌握的例题)
  11. Linux内核入门(三)—— C语言基本功
  12. android 谷歌地图离线访问,谷歌升级Android版地图应用 支持离线使用
  13. websockets.exceptions.ConnectionClosedOK错误解决方案
  14. think-queue使用教程-用户注册场景异步发送邮件
  15. 现代材料分析方法习题汇总及答案
  16. 你的奋斗也许只是一个屁
  17. 不用安装Wincap程序实现ARP广播包的发送和接收
  18. java中throw是什么意思_Java中throw和throws的区别是什么
  19. Linux服务器NTP客户端时钟同步配置方法
  20. 分享63个投票调查PHP源码,总有一款适合你

热门文章

  1. 不断突破道,用道来挣钱才能长稳,才能心安!
  2. ImportError: DLL load failed:找不到指定的模块 解决方案
  3. 中职计算机教师考核工作总结,中职计算机教师教学工作总结
  4. 台式计算机键盘灯打开方式,台式机开机黑屏但键盘指示灯亮的解决方法
  5. 从微信封杀拼多多链接浅谈我是如何解决微信屏蔽封杀外部以及广告链接的
  6. iOS touchID 处理办法
  7. Python 多变量赋值实现“交换”
  8. 《商务与经济统计》(四)
  9. 《 指数基金投资指南 》by 银行螺丝钉 - 笔记 - 3小尾巴~
  10. 编码器SRT协议三种模式(listener, caller, rendezvous)简介