HDU-3237-Help Bubu
ACM模版
描述
题解
状压 DPDP。
设 dp[i][j][k][s]dp[i][j][k][s] 表示为前 ii 本书拿走 jj 本剩下的书状态为 kk 最后一本书的高度是 ss 的最少类数。这里的状态指的是剩下的书所有的高度,而不是剩下的书的序列状态,为什么要这样设置呢?因为我们设置的抽出的书并没有直接考虑如何插入,而是放到最后统一插入,如果抽出的书中有高度 xx,而剩下的书也有高度 xx 自然是不需要产生更多类的,否则就需要产生新的类。所以最后遍历一遍 dp[cur]dp[cur],判断不同状态 kk 所对应的被抽书状态与 kk 的差集,这个差集就是需要产生的新的类。
神乎其技的状压 DPDP,注意边界问题,注意滚动数组。
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>using namespace std;const int MAXB = 8;
const int MAXN = 110;
const int MAXM = 1 << MAXB;
const int LIMIT = 25;
const int INF = 0x3f3f3f3f;int n, m, ans;
int book[MAXN];
int cnt[MAXM];
int state;
int dp[2][MAXN][MAXM][MAXB + 1];void init()
{for (int i = 0; i < MAXM; i++){for (int j = 0; j < MAXB; j++){if (i & (1 << j)){cnt[i]++;}}}
}int main()
{init();int ce = 0;while (~scanf("%d%d", &n, &m) && n + m){int mx = state = 0;for (int i = 1; i <= n; i++){scanf("%d", book + i);book[i] -= LIMIT;if (book[i] > mx){mx = book[i];}state |= (1 << book[i]);}++mx;int tot = (1 << mx);memset(dp[1], 0x3f, sizeof(dp[1]));dp[1][0][1 << book[1]][book[1]] = 1;dp[1][1][0][mx] = 0;for (int i = 2; i <= n; i++){int cur = i & 1;int pre = 1 - cur;memset(dp[cur], 0x3f, sizeof(dp[cur]));for (int j = 0; j <= m && j < i; j++){for (int k = 0; k < tot; k++){for (int s = 0; s <= mx; s++){if (dp[pre][j][k][s] == INF){continue;}int tmp = k | (1 << book[i]);if (j < m){dp[cur][j + 1][k][s] = min(dp[cur][j + 1][k][s], dp[pre][j][k][s]); // 取最后一本}if (s == book[i]){dp[cur][j][k][s] = min(dp[cur][j][k][s], dp[pre][j][k][s]);}else{dp[cur][j][tmp][book[i]] = min(dp[cur][j][tmp][book[i]],dp[pre][j][k][s] + 1);}}}}}int cur = n & 1;int ans = n, st;for (int j = 0; j <= m; j++){for (int k = 0; k < tot; k++){for (int s = 0; s < mx; s++){if (dp[cur][j][k][s] != INF){st = state ^ k; // 抽走的就是额外的类ans = min(ans, cnt[st] + dp[cur][j][k][s]);}}}}printf("Case %d: %d\n\n", ++ce, ans);}return 0;
}
HDU-3237-Help Bubu相关推荐
- HDU 3966 POJ 3237 HYSBZ 2243 HRBUST 2064 树链剖分
树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...
- UVA 12235 Help Bubu
状态压缩DP 题意: 书架上有n本书,给出一个书的高度的序列,我们把相邻的高度相同的书看成一个片段,并且定义该书架的混乱程度为片段的个数.为整理书架,你最多可以从中拿出k本书,然后再把他们插回书架(其 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...
- 大数加法【HDU 1002】
大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...
最新文章
- 2018年中国研究生数学建模竞赛C题 二等奖 赛题论文
- 学习Duwamish7的MSDN说明及相关技术策略
- 一台微型计算机性能的主要参数及其意义,微型计算机的主要性能指标.ppt
- java运行 mavenzip包_JAVA开发必知工具-Maven-Maven生成可以直接运行的jar包的多种方式...
- About static contructor API changes in cocos2d-...
- 惠普收购Palm意在遏制同系竞争
- 阿里云 ubuntu 安装 curl
- Java从入门到熟悉的48道练习题[完结]
- python 蒙特卡洛模拟股价_利用python进行蒙特卡罗模拟
- composer 升级/降级安装包
- Worthington 分子生物学解读
- c语言二级程序设计题难吗,c语言二级公共基础知识试题特点
- 一文搞懂PMP挣值管理那些让你头疼的公式
- (2021网络安全中职组脚本)免费的脚本哦!
- APP二维码渠道统计解决方案
- android实现棱形效果
- 网管软件哪家比较好用
- server 服务器文档,aserver 服务器
- SLAM学习资料收集
- 全屋智能方案与智能单品有什么区别?看完你就懂了
热门文章
- 不是计算机专业的,可以转行学IT吗?
- 万娟 白话大数据和机械学习_《白话大数据与机器学习》.pdf
- Misumi米思米数据线驱动无法安装
- php 竖向文字水印,PHP中实现文字水印和图片水印的方法
- PCB安规设计是怎样的?怎样设计高压电源的安规?ECM设计间距是怎样的,CAF设计间距要求是怎样的?电源的PCB间距设计指南,安规标准有哪些?380V电源安规设计
- 基于遗传算法的新安江模型参数优化率定(二)
- #前端# 万字总结!前端项目化超详细方法及思路!
- miui11稳定版获取完整root_怎么获取root权限-MIUI11系统开启系统ROOT权限图文教程-支持小米红米全部机型...
- 《计算传播学导论》读书笔记:第六章 网络传播模型与机器学习框架
- 【中软杯国二开源】基于PaddleOCR和深度学习的企业实体识别