LA 4490 Help Bubu (状压DP)
题意:给出n和k,表明书架上有n本书,可以取出k次书,每次取出后可以任意放回书架中,书的编号为25~32八种,定义该书架的混乱程度为片段的个数。求出最小的混乱度。
分析:看到题完全没什么头绪的样子,看了题解,这种略为复杂的状压DP的状态表示比起平时做DP题直接找一个切入点去建模YY状态的表示方法和状态转移方程,更像是直接对暴力搜索进行抽象后的得到的一个可行的状态表示方法,DP之所以效率高就是因为它的状态表示对问题进行了极大的抽象,把大部分中间情况压入了一个状态当中,然后利用无后效性逐步递推得到每种状态的结果。f[i][j][s][end]表示当前处理到了第i本书,前边一共拿走了j本,剩下的书的状态为s,最后一本书为end的最小混乱度,本题还有很重要的一点就是,我们拿走一本书后可以先不考虑放回,最后全部拿完后再一次全部放回,然后是对于每个本书i的策略:如果i和end同种,那么f[i][j][s][end] = f[i-1][j][s][end],否则拿走:f[i][j+1][s][end] = f[i-1][j][s][end]+1,不拿走f[i][j][s | col[i]][col[i]] = f[i-1][j][s][end]+1,边界条件f[0][0][0][0] = 0;
#include <queue>
#include <vector>
#include <cstdio>
#include <utility>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int n,k,tot,toss,f[2][105][300][10],col[105];
int got(int x)
{int now = x ^ tot,num = 0;while(now){if(now & 1) num++;now>>=1;} return num;
}
int main()
{cin.sync_with_stdio(false);while(cin>>n>>k && n+k){tot = 0;for(int i = 1;i <= n;i++) { cin>>col[i];col[i]-=24;tot = tot | (1<<(col[i]-1));}memset(f[0],INF,sizeof(f[0]));f[0][0][0][0] = 0;for(int i = 0;i < n;i++){int now = i & 1;memset(f[now^1],INF,sizeof(f[now^1]));for(int j = 0;j <= k;j++)for(int s = tot;s >= 0;s = min(s-1,(s-1)&tot))for(int End = 0;End <= 8;End++){if(col[i+1] == End) f[now^1][j][s][End] = min(f[now^1][j][s][End],f[now][j][s][End]);else{f[now^1][j+1][s][End] = min(f[now^1][j+1][s][End],f[now][j][s][End]);f[now^1][j][s | (1<<(col[i+1]-1))][col[i+1]] = min(f[now^1][j][s | (1<<(col[i+1]-1))][col[i+1]],f[now][j][s][End]+1); }}}int ans = 2147483647;for(int j = 0;j <= k;j++)for(int s = tot;s >= 0;s = min(s-1,(s-1)&tot))for(int End = 0;End <= 8;End++)ans = min(ans,f[n & 1][j][s][End] + got(s));cout<<"Case "<<++toss<<": "<<ans<<endl<<endl;}
}
LA 4490 Help Bubu (状压DP)相关推荐
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- 【每日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 ...
- hdu 4778 Gems Fight! 状压dp
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
- 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)
题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...
- P2340 奶牛会展(状压dp)
P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp
给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...
最新文章
- AJAX+JSF组件实现高性能的文件上载
- PPT 下载 | 神策数据孙超赟:数据驱动,做可“视”化运营
- Nginx缓存引发的跨域惨案(转:https://www.baidu.com/home/news/data/newspage?nid=9966642810298490574n_type=0p_f)
- play框架入门操作
- cad常用字体包_水利设计CAD基础篇(一)
- android uber启动动画,模仿Uber的启动画面(上)
- 在应用程序中加一个控制台
- babel需要这样配置
- [研究笔记]Lambda表达式学习笔记
- Java通过Netty实现Websocket消息推送
- 郑州大学远程教育学院C语言程序设计题库(二)
- DSOFramer原有的接口说明
- 淘宝分布式配置管理服务Diamond
- node.js以及Vue的脚手架安装过程
- 「 Mac应用加密工具」AppLocker for Mac 2.7.0
- 全民一起VBA实战篇 专题2 第二回 选择法轻松上手,双循环巧妙排序
- 001一种儿童癫痫发作的非通道广义癫痫检测方法-2021
- 仓储绩效评价指标的原则
- sentos7查看网络配置_怎么查看centos7的网络配置
- 婚礼请柬邀请函电子版制作模板,520一起来参加婚礼吧!