这是目前碰到最难的dp题之一,看题解都看得迷迷糊糊的。

现在是定义状态dp[i][j][s][x],代表前i本书,拿走了j本书,s是剩下书的集合,x是最后一本书的高度的混乱度。

为了省空间,第一维可以用滚动数组。

然后依次枚举第二三四维,如果目前的高度h与x相同,那直接从i-1继承过来即可,如果不相同,那就有两种选择,一种选择是拿走这本书,另一种选择是把这本书放进去。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ss(x) scanf("%d",&x)
const int maxn=8;
const int inf=0x3f3f3f3f;
int f[2][100][(1<<maxn)][10];
int n,k;
int bitcount(int x) {return x>0?bitcount(x/2)+(x&1):0;}
int main()
{int kase=0;while(true){int h,all=0;ss(n);ss(k);if(n+k==0) break;memset(f[0],inf,sizeof(f[0]));for(int i=0;i<n;i++){ss(h);h-=25;int p=i&1;int q=!p;memset(f[q],inf,sizeof(f[q]));f[q][i][1<<h][h]=1;for(int j=0;j<=min(i,k);j++){for(int s=all;s!=0;s=(s-1)&all){for(int x=0;(1<<x)<=s;x++){if(f[p][j][s][x]!=inf){if(h==x) f[q][j][s][x]=min(f[q][j][s][x],f[p][j][s][x]);else{f[q][j+1][s][x]=min(f[q][j+1][s][x],f[p][j][s][x]);f[q][j][s|(1<<h)][h]=min(f[q][j][s|(1<<h)][h],f[p][j][s][x]+1);}}}}}all|=(1<<h);}int ans=inf;for(int i=0;i<=k;i++){for(int s=all;s!=0;s=(s-1)&all){for(int x=0;(1<<x)<=s;x++){if(f[n&1][i][s][x]!=inf) ans=min(ans,f[n&1][i][s][x]+bitcount(s^all));}}}printf("Case %d: %d\n\n",++kase,ans);}return 0;
}

UVA 12235 Help Bubu(状压dp)***相关推荐

  1. UVA - 1252 Twenty Questions (状压dp+vis数组加速)

    有n个物品,每个物品有m个特征.随机选择一个物品让你去猜,你每次可以询问一个特征的答案,问在采取最优策略时,最坏情况下需要猜的次数是多少. 设siz[S]为满足特征性质集合S的特征的物品总数,dp[S ...

  2. UVA 1633 Dyslexic Gollum (状压dp)

    分析:dp[i][j]表示当前为i长度,长度为k的后缀状态,有多少个串.考虑一下k和k+1长度的串是否为回文串即可 代码: #include <iostream> #include < ...

  3. 状压DP UVA 10817 Headmaster's Headache

    题目传送门 1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][ ...

  4. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  5. 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)

    本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧   http://acm.hdu.edu.cn/showproblem.php?p ...

  6. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  7. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  8. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  9. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  10. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

最新文章

  1. oracle恢复误删除记录
  2. 2015年必火的五个Html5移动开发工具推荐
  3. 如何在SAP WebClient UI里使用HANA Live report
  4. 100元左右的鼠标推荐
  5. 统计MySQL中某数据库硬盘占用量大小
  6. 第一章:Python的基本数据类型-第二节:Python中表示“有序”(序列)的数据类型
  7. 作为一个新手程序员该如何成长?
  8. java qq在线客服,Java获得腾讯QQ在线状态(.net webservice) | 学步园
  9. 魔百盒哪款型号配置高_砂石厂都在用哪种洗砂设备,哪款洗沙机效率更高?
  10. VI3之vCenterServer配置的备份与还原
  11. ANSYS_APDL——实例002-模态分析
  12. flea-jersey使用之Flea RESTful接口介绍
  13. 行业集中度(Concentration Ratio)
  14. 【学习】自学JavaScript
  15. WIN10 系统重新安装 WIN7 系统步骤
  16. R语言绘制坐标 保存图片
  17. 【读图】揭密大卖家们的钻展制作流程
  18. DTX1800校准的意义?---DTX-1800线缆测试仪此校准而非彼校准
  19. 我们如何研发了世界上最酷的调车内燃机车自动驾驶系统
  20. 找懂的大佬做一个闲鱼监控软件,大概要求如下。

热门文章

  1. 大专学计算机为什么不好,大专学计算机后悔了是怎么回事 大专计算机专业学校推荐...
  2. python复数类型及其特点和分布地区_各种气候类型及其特点、分布规律、主要分布地区、数值特征...
  3. 在linux系统下做软raid教程
  4. 大数据学习教程SD版第三篇【Hadoop HDFS】
  5. 卡西欧计算机怎么进制转换,卡西欧计算机怎么把十进制转换二进制
  6. Python压缩解压zip文件
  7. 原始套接字Raw Socket基础-- WSADATA wsaData(转)
  8. 常见的非关系型数据库有哪些
  9. 一种结构和纹理感知 Retinex 模型 (2020 TIP) (1 of 2)
  10. Android上的CPU和GPU是共享内存,为什么有的手机从GPU读取数据还是很慢?