E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
ACM--状态压缩DP
HDU 5067 (
状态压缩DP
+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子。把地图上所有石子都运回起点,问最少耗时。 解题思路: 首先得YY出来。 最少耗时肯定是从起点出发,把所有石子点走一遍且只走一遍,把石子装在车上,然后最后回到起点。 由于石子堆最多也就10个。不难看出这就是个裸的TSP。 首先BFS计算出每个石子
·
2015-11-12 17:01
HDU
HDU 4856 (
状态压缩DP
+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫。迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时。出隧道就耗时,你的任务是访问完所有隧道且仅一次,求最短耗时。 解题思路: 暑假练习的时候。把英文读了N遍也没理解题意。 其实就是个最后不回到开头的TSP。 首先求BFS求两两隧道之间的最短路,注意B
·
2015-11-12 17:55
HDU
HDU 4511 (AC自动机+
状态压缩DP
)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4511 题目大意:从1走到N,中间可以选择性经过某些点,比如1->N,或1->2->N,但是某些段路径(注意不是某些条)是被禁止的。问从1->N的最短距离。 解题思路: AC自动机部分: 如果只是禁掉某些边,最短路算法加提前标记被禁的边即可。 但
·
2015-11-12 17:48
AC自动机
POJ 3691 (AC自动机+
状态压缩DP
)
题目链接: http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段。问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA。 解题思路: 首先说一下AC自动机在本题中的作用。 ①字典树部分:负责判断当前0~i个字符组成的串是否包含致病DNA,这部分靠字典树上的cnt标记完成。 ②匹配部分:主要依赖于
·
2015-11-12 17:47
AC自动机
poj 3254 Corn Fields_
状态压缩dp
感谢:http://www.cnblogs.com/ka200812/archive/2011/08/11/2135607.html 让我搞懂了。 #include <iostream> #include <cstring> #include<cstdio> #include <vector> using namespace std; int n
·
2015-11-12 17:57
Field
UVa 10817 Headmaster's Headache(
状态压缩DP
)
题意: 有一个学校想要聘请老师,要求每个学科都有两个以上的老师授课,并且要使总费用最小。有S(最多8个)个学科,现任的M(最多20个)个老师(你必须继续聘请他们),N(最多100个)份申请。后来的M行每行有至少两个整数,表示现任的老师的工资,和他所教授的课程(可能不止一个)。再后来的N行每行有也有至少两个整数表示聘请这个老师所需的费用,以及他所教授的课程(可能不止一个)。 思路: http:
·
2015-11-12 17:28
master
UVa 10911 Forming Quiz Teams(
状态压缩DP
)
题意: 有2*n个点,使其组成n对,求n对点集的最小距离之和。 思路: 由于2*n最大才20,完全可以由数字的位来表示,每一个数字表示一个状态,然后才去记忆化搜索的方式得出结果。 (看了别人的题解才想起来怎么去做,关于状态压缩的动归,还是没能很好的形成思维。多观察,多总结规律然后归纳之,减少冗余,使收益最大化) #include <cstdio> #include <
·
2015-11-12 17:23
form
UVa 10029 Edit Step Ladders(hash
状态压缩DP
)
题意: 给定多个字符串,是按照字典顺序排列的。一个字符串如果能够可以通过改变一个字母,删除一个字母,增加一个字母变成后面的某一个字符串, 那么称这两个字符串之间存在一个阶梯,问最多有多少个阶梯。 思路: http://www.cnblogs.com/staginner/archive/2011/11/30/2269222.html 这一题的难点在于题目数据量很大,O(n^2)的算法铁定会
·
2015-11-12 17:20
hash
UVa 10651 Pebble Solitaire(
状态压缩DP
)
题意: 类似于跳棋,当两颗石子左或者右有空位置时,移动。每次转移之后移去经过的石子。 思路: 有12个格子,所以状态最多有2^12=4096个。把每次搜索过的状态存在dp[]数组中,以后再次查询类似的直接返回即可。 #include <cstdio> #include <cstdlib> #include <cstring> #define
·
2015-11-12 17:12
AIR
hdu4336 Card Collector
状态压缩dp
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1708 Accepted Submission(s): 780 Special Judge Problem Description In your ch
·
2015-11-12 17:15
Collector
HDU 4856
pid=4856 西安邀请赛的一道题,这道题我们当时在现场最后1h才发现时
状态压缩dp
,惊险写出 现在回头想发现当时有点呆,这种明显tsp模型的题目当时鬼迷心窍去写搜索,超时而不知悔改,实际是水题一道
·
2015-11-12 14:29
HDU
HDU 5067
pid=5067 规定起点和终点的tsp问题,解法依然是
状态压缩dp
,在初始化和计算答案的时候略做改动即可 #include <iostream> #include <cstdio
·
2015-11-12 14:29
HDU
HDU 5045
m的矩阵代表第n个学生解第m题AC的概率,任意两学生做题数差距不能大于1,问AC所有题目概率的最大值 由于限制条件,所以一定是以n个学生为单位,一轮一轮的做题,直到做m题为止,这样题目就转化为了一个
状态压缩
·
2015-11-12 14:26
HDU
2014 Super Training #4 B Problem Arrangement --状压DP
这题不会做,看网上是用
状态压缩DP
做的。 定义: dp[i]
·
2015-11-12 14:27
super
【上海交大oj】邮递员小F(
状态压缩dp
)(旅行商问题)
1088. 邮递员小F Description 因为制造类专业很难在大城市立足,曾经立志振兴中华之工业的小F,果断在本科毕业后转行做了一名光荣的邮递员。 他的任务是每天从总局出发,行走于所管辖区域的若干的邮局,收集所有的信,然后再汇总返回总局。 因为工作繁忙,同一个邮局他每天只希望去一次。 来往于任意两个邮局是有一定代价的。而且为了方便统计,假定来回两条道路上的代价假设是一样的。 现
·
2015-11-12 14:34
压缩
【上海交大oj】畅畅的牙签袋(
状态压缩dp
)
1383. 畅畅的牙签袋 题目描述 畅畅说:“你们都说窝脑子瓦特了,我看你们才是脑子瓦特嘞- -” 为了阻挠我们再次揭露他的无chǐ,畅畅妄图破坏我们的显示器,他拿出了自己收集的牙签包装袋,其大小是1×2的矩形,他想用密铺的方式把显示器全部遮挡住。显示器大小是W×H的矩形,畅畅把包装袋背面涂上了胶水,开始一块一块粘到显示器上,要求不能有包装袋重叠,也不能有显示器的某
·
2015-11-12 14:33
压缩
Mondriaan的梦(
状态压缩dp
)
题目原题可以看POJ2411,大意是给出m*n的矩形,要用2*1的矩形将它铺满(不能讲一个矩形铺在另外一个上面),求方案数,并且只要不是完全相同的就算不同的方案,也就是对称算不同的方案。 F[i][s]表示前i-1行已经填满,并且第i行的状态是s的方案数。 F[i][s]=sum(F[i-1][s’]); s‘能转移到s。如何根据s来确定s'呢。这里用一个dfs实现,一位一位去填充s'。扫描
·
2015-11-12 14:13
RIA
HDU 1074 (
状态压缩DP
)
也就是
状态压缩DP
。 用二进制位表示做作业的顺序。总bit=1<<15。 对于状态i,枚
·
2015-11-12 13:41
HDU
POJ 1691 Painting A Board(
状态压缩DP
+ 记忆化搜索)
题意: 有一个矩形框由n个小的矩形组成,现在要把每个矩形涂上一种颜色c(可相同可不同,如下图)。为了保证涂的质量,涂每个小矩阵有一个条件,就是位于它上面,并且与它有连接的小矩形必须先涂好。当然满足条件的同一种颜色可以一起涂,问最少需要多少把刷子(每把刷子一种颜色)。 黑书 146 :平板涂色 思路: 1. 矩形的数量不超过 15,所以自然的联想到利用状态压缩去解决问题,并且为了解决无后效性
·
2015-11-12 13:43
paint
POJ 1185 炮兵阵地(
状态压缩DP
)
题意: 求最大的炮兵摆放数量,并且使他们之间不相互误伤。 NOI 01 的题目。 思路: 1. 和 POJ 1038 类似,把行看成是一个整体,每一种摆放代表着一种状态,r-2, r-1 行的状态决定着 r 行的状态; 2. 本题状态比较稀疏,所以提前处理下炮兵的摆放无意是比较好的选择,由于没两个炮兵之间至少相距为 2,利用这个把每一行的炮兵可能摆放情况存放起来; 3. dp[r][i
·
2015-11-12 13:41
poj
POJ 1038 Bugs Integrated(
状态压缩DP
)
题意: 将 2*3 的芯片嵌入 n*m 的单位尺寸模板中,模板上面有一些坏点将被标记出,求最大的芯片数量。 黑书 138 页的例题, CEOI 2002; 思路: 1. 由于 m <= 10,所以可以针对每一行看成一个整体,根据情况来产生一个状态,首先肯定是枚举当前行的状态,来产生下一行的状态了,时间复杂度为O(nm3m); 2. 递推的过程中,因为是由一个已知状态,转移到多个未知
·
2015-11-12 13:41
integrate
POJ 2688 Cleaning Robot(BFS + A* +
状态压缩DP
)
题意: 给你一个N * M(1 ≤ N, M ≤ 20)的地图,'.'表示空位,'*'表示垃圾,'o'表示机器人的初始位置,'x'表示墙。请你计算机器人清理完所有的垃圾至少要走多少步。 机器人一旦走到垃圾上,垃圾就被清掉了。输入数据保证垃圾不多于10个。 思路: 1. 先 BFS 求出任意两个污点间所需要的最小步数。题目保证了污点数不超过 10 个,这时候可以应用经典的 TSP 模型,用状
·
2015-11-12 13:28
robot
POJ 1321 棋盘问题(
状态压缩DP
| DFS)
题意: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 k 个棋子的所有可行的摆放方案C。 思路: 1. 把每一行的摆放情况看作是一个状态,则最多有 2n 个状态,本题不超过 2^8; 2. 如果用状态压缩的动态规划来看待的话有: 第 i 行不放棋子,dp[i
·
2015-11-12 13:20
poj
hdu 2167 Pebbles(
状态压缩DP
)
入门级
状态压缩dp
题。 题意:从方格中取一些数,要求所取位置不相邻(包括对角线相邻),求最大的和。
·
2015-11-12 12:27
HDU
poj 1185 & hdu 4539(
状态压缩DP
)
这两道题如出一辙,只是判断有效状态有一点小差异。 每一行的状态只与前面两行的状态有关,每行可以压缩为二进制的集合,设状态dp[i][j][k]为第i行为集合j,第i-1行为集合k, 得出状态方程dp[i][j][k] = max{dp[i-1][k][r]+cnt[j] | 状态i,j,k要能够共存}(cnt[j]为j在二进制下的1的个数,即士兵数)。第一维可以压缩为2,即两种状态
·
2015-11-12 12:26
poj
POJ 1321 棋盘问题(DFS & 状压DP)
在Discuss里看到有同学用
状态压缩DP
来写,就学习了一下,果然很精妙呀。 状态转移分两种,当前行不加棋子,和加棋子。
·
2015-11-12 11:05
poj
poj 2686 Traveling by Stagecoach ---
状态压缩DP
题意:给出一个简单带权无向图和起止点,以及若干张马车车票,每张车票可以雇到相应数量的马。 点 u, v 间有边时,从 u 到 v 或从 v 到 u 必须用且仅用一张车票,花费的时间为 w(u, v) / ticket[i], 其中 w(u, v) 表示边的权值,ticket[i] 表示第 i 张车票可以雇到的马匹数。求从起点到终点花费的最小时间。 如果不能到达终点,输出“Impossib
·
2015-11-12 09:26
poj
poj 2411 Mondriaan's Dream_
状态压缩dp
题意:给我们1*2的骨牌,问我们一个n*m的棋盘有多少种放满的方案。 思路: 状态压缩不懂看,http://blog.csdn.net/neng18/article/details/18425765 用1表示放置了骨牌,0表示没有放置。dp[i][j]表示第i行为状态j是有多少种方案。 分下面3种情况进行转移: d表示当前列号,s1 表示本行的状态,s2表示上一行的状态, 1 竖直放置 &nbs
·
2015-11-12 09:09
poj
poj 2288 Islands and Bridges_
状态压缩dp
_哈密尔顿回路问题
题目链接 题目描述:哈密尔顿路问题。n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiCi+1,加上Vi*Vi+1 3.对于路径中的连续三个点:CiCi+1Ci+2,若在图中,三点构成三角形,则要加上Vi*Vi+1*Vi+2 求一条汉密尔顿路可以获得的最大值,并且还要输出有多少条这样的
·
2015-11-12 09:05
bridge
Vijos 1286 座位安排(
状态压缩DP
)
题目链接 先是一个转化,将n和m中较小的的为m这样状态数会小于1<<9。看题后,是嘛想法都啊没有。。看了DISUSS中有人提到这点。。。 写完,调了一下,尝试了几次,发现有两组过不了。想想极限数据,可能还是会爆__int64,然后乱搞改编一下,求组合数模版。。。水过了。。。 还是用STL中vector写的。。。以后还是用数组把。。。 1 #include <cstd
·
2015-11-12 09:22
OS
Vijos 1456 最小总代价(
状态压缩DP
)
题目链接 用二维数组表示,第一维表示状态,第二维表示此状态最后一个专递者。 状态转移为 if((~que1[j])&(1<<u))//开始这个判断想错了,一直RE。。。对位运算不熟啊。。 dp[que1[j]+(1<<u)][u] = min(dp[que1[j]+(1<<u)][u],dp[que1[j]][k]+p[k+1][u+1]);
·
2015-11-12 09:21
OS
Vijos 1193 扫雷(
状态压缩DP
)
题目链接 思路很简单。。。但是细节啊。。。。WA了好多次。。。 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <string> 5 #include <ctime> 6 #include <cstdlib>
·
2015-11-12 09:21
OS
HDU 1565 方格取数(1)(
状态压缩DP
)
题目链接 水过的,就是普普通通的枚举上一层和这一层,应该可以加上队列优化,降复杂度。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #define eps 1e-9 6 #define INF -100
·
2015-11-12 09:32
HDU
POJ 2411 Mondriaan's Dream(
状态压缩DP
)
题目链接 早就见过这个题,开始以为有公式的,推了几次没推出,后来知道这个题是
状态压缩DP
。最近开始看状态压缩,本想试着解出来,但是这个比那个牛吃草复杂多了。。。
·
2015-11-12 09:29
poj
POJ 3254 Corn Fields(
状态压缩DP
)
题目链接 看的这个博客,讲的很好,初学状态压缩,对位运算操作还不是很熟,有很多用法,然后就是这个题,开始想用队列优化一下,存上一层合法情况的下标的,老是RE不知为何。。改成暴力的找,居然0ms就过了,这让我情何以堪啊。。。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring>
·
2015-11-12 09:28
Field
poj1185 炮兵阵地 经典
状态压缩dp
这个题目和上一个种玉米的是一个类型,都是状态dp,用二进制位来表示当前的一个状态值,只不过比上一个稍微复杂了一点,需要用三维的数组来保存当前state。 题目:在一个N*M的矩阵上布置炮兵部队,只有平原可以布置,然后每个炮兵部队都有一个攻击范围,它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。 问:如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮
·
2015-11-11 18:24
poj
状压DP POJ 3254 Corn Fields
题目传送门 1 /* 2
状态压缩DP
:先处理硬性条件即不能种植的,然后处理左右不相邻的, 3 接着就是相邻两行查询所有可行的种数并累加 4 5 写错一个地方差错N久
·
2015-11-11 18:48
Field
状压DP SGU 223 Little Kings
题目传送门 1 /* 2 题意:n*n的矩阵,放置k个king,要求king互相不能攻击,即一个king的8个方向都没有另外的king,求方案个数 3
状态压缩DP
:dp[
·
2015-11-11 18:47
it
状压DP POJ 2411 Mondriaan'sDream
3
状态压缩DP
第一道:dp[i][j] 代表第i行的j状态下的种数(状态即为二进制10101110101...的样子) 4 横着的定义为11,竖着的定义为01,当两行的状态已填满并且没有出现奇数个
·
2015-11-11 18:46
poj
状态压缩dp
/sgu 131 Hardwood floor
题意 给出一个n*m的格子,要求用1*2的块和2*2缺一角的块填满,求方案数 分析 状压dp,以下来自nocow:
状态压缩DP
,转移的时候情况很多,要一个个写出来理清楚再写。
·
2015-11-11 18:58
OO
poj 2411 Mondriaan's Dream
状态压缩DP
打表
将题目转换题意, 有一个M列的墙, 我们需要 使用 1*2 的小矩形 砌成N层高, 有多少不同的方案数量. 因为只有1*2的砖头, 且只有竖立或者横着放. 那么我们规定 竖立放置的砖头属于 较高的一层, 且 当前点放置砖头则为1,否则为0 那么我们可以得出结论: 对于 I 层 状态 X , 若当前位置为0,则下层必定为1. 则意味着下层必定包含 t = (~X)&
·
2015-11-11 17:06
poj
位运算简介及实用技巧(四):实战篇
代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和
状态压缩DP
方面的题目。其实大家可以在网上找到更多用位运算优化的题目,这里整理出一些自己写的代码,只是为了原创系列文章的完整性。
·
2015-11-11 15:07
位运算
POJ 2817 WordStack(
状态压缩DP
)
题目链接 以前的坑,以前做的时候,用暴力各种跪,其实是
状态压缩DP
。暴力处理出来后,状态+标记最后一个单词。
·
2015-11-11 15:36
stack
POJ 1185 炮兵阵地(
状态压缩DP
)
题目链接 写了久。DEBUG很久。 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <map> 6 #include <queue> 7 #
·
2015-11-11 15:35
poj
记录做过的各种DP
做DP,已经有一段时间了,虽然还有很多不会的,树形DP,数位DP,
状态压缩DP
。。。
·
2015-11-11 15:58
dp
hdu4310贪心
明明贪心是正确的嘛,不知道为什么官方的解题报告说是
状态压缩DP
。
·
2015-11-11 15:05
HDU
hdu 1565
状态压缩DP
这题可以用最大流做,为了练DP就用状态压缩了。我一开始只想到一个O(n*2^n*2^n)的方法,效率太低,看了某大牛的解题报告后,才将算法优化到O(n^2*2^n)。 不过就这样还WA了好几次,原因是代码中一句 if ((k & t) == 0)我开始写成了if (k & t == 0) 没有注意到位运算符的优先级是低于逻辑运算符的,谨记谨记! /* * hdu1565/
·
2015-11-11 15:44
HDU
状态压缩DP
-棋盘模型总结
论文:《周伟ftfish --- 动态规划之状态压缩》 关键之处在于: ①针对棋盘不同限制用dfs把每行可行的状态压缩表示成一个数存到s[]。 ②枚举当前处理行和上一行的状态时根据题目限制判断状态是否互斥。 ③有时棋盘上会有些点不能放置,我们也把一行中不能放置的点压缩成一个数存到no[]中,比如用00011000表示第3列和第4列不能放置。然后处理当前行时如果s[j1] & no[i] =
·
2015-11-11 12:31
总结
状态压缩DP
-棋盘模型总结
论文:《周伟ftfish --- 动态规划之状态压缩》 关键之处在于: ①针对棋盘不同限制用dfs把每行可行的状态压缩表示成一个数存到s[]。 ②枚举当前处理行和上一行的状态时根据题目限制判断状态是否互斥。 ③有时棋盘上会有些点不能放置,我们也把一行中不能放置的点压缩成一个数存到no[]中,比如用00011000表示第3列和第4列不能放置。然后处理当前行时如果s[j1] & no[i] =
·
2015-11-11 12:30
总结
SGU132 - Another Chocolate Maniac(
状态压缩DP
)
题目大意 给定一个N*M大小的大小的蛋糕,蛋糕的有些地方已经放置了东西,要求你在蛋糕上放入尽量少的1*2大小的巧克力,使得蛋糕不能够再放入巧克力 题解 和POJ1038恰好相反,此题是放入尽量少的巧克力,根据前两行的状态来进行当前行的放置,用dfs来进行三行的状态枚举,并同时检查放置是否合法,放完m列之后就可以进行状态转移了 代码: #include <iostream> #
·
2015-11-11 12:44
man
上一页
8
9
10
11
12
13
14
15
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他