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
关于位运算——
状态压缩DP
预备知识
&(按位与):如果两个二进制数其对应位上都为1,那么这一位的得数为1,否则为0。^(按位异或):如果两个二进制数其对应位上都不相同那么该位得数为1,否则为0。|(按位或):如果两个二进制数其对应位上其中有1个为1,那么该位得数为1,否则为0。>:类似于除以2或者乘以2,(即,去掉最后一位或者在最后一位补0)。~(按位取反):先加一再取相反数。(在位运算的时候1变0,0变1,含符号位)。剩下好像没什
zxn0803
·
2015-11-18 18:00
位运算
POJ3254 Corn Fields (
状态压缩DP
)
题目点我点我点我题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法。思路:利用一个state数组记录所有可行状态的情况,将输入的每一行数取二进制的相反数,与state的可行状态相匹配,每一种匹配的状况再与前一行状况匹配,dp[i][j]代表第i行的第j种状态,记录第i行的第j种状态的方案数,利用层层递推,最后将最后一行所有
L954688947
·
2015-11-17 21:00
POJ241 Mondriaan's Dream(
状态压缩DP
)
人生第一道
状态压缩DP
,我这个弱渣想了N天终于弄懂了◑﹏◐题目大意:求1*2的地板填满n*m的砖块有多少种不同的方法思路:位运算+DFS+状态压缩。当高度和宽度都为奇数时答案为0。
L954688947
·
2015-11-16 22:00
hdu 4640 Island and study-sister(
状态压缩dp
)
先处理前两个学长到达各个点所需要的最少时间,在计算前两个学长和最后一个学长救出所有学妹的最少时间。 #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; const int inf=100
·
2015-11-13 21:12
HDU
hdu 5045 Contest(
状态压缩DP
)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人)。 详细见代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; ty
·
2015-11-13 19:50
test
uva 10817 - Headmaster's Headache (
状态压缩dp
)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每门课都至少有两名教师教学。在职教师必须招聘。 思路 这题不太好想,搞了很久。。 f[s1][s2]:
·
2015-11-13 18:12
master
poj 1185 炮兵阵地 [经典
状态压缩DP
]
题意:略。 思路:由于每个大炮射程为2,所以如果对每一行状态压缩的话,能对它造成影响的就是上面的两行。 这里用dp[row][state1][state2]表示第row行状态为state2,第row-1行状态为state1时最多可以安放多少大炮。 则递推公式为:dp[i][K][J] = max(dp[i-1][L][K] + num[J])。其中num[J]表示状态J的二进制形式里有多少个
·
2015-11-13 17:39
poj
POJ 2411 Mondriaan's Dream [经典
状态压缩dp
]
题意:略。 思路:这一题开始做的时候完全没有思路,便去看了别人的题解。 首先,对于这个题目解法想有一个初步的了解,请看这里:http://www.2cto.com/kf/201208/146894.html 根据这篇讲解,写了一篇扭曲的代码,提交之后TLE。 经过排查分析之后发现,算法的复杂度为O(hw*(2^(2w))),这个复杂度肯定超了。后来进行了优化,如果两种状态可以匹配,就将它们
·
2015-11-13 17:38
poj
炮兵阵地 POJ 1185
状态压缩dp
记忆化搜索这是放棋子的模型,因为攻击范围,所以要保存两行的状态,枚举。
·
2015-11-13 16:03
poj
Hlg 1067 【
状态压缩DP
】.cpp
题意: 给出每一秒降落的蚊子坐标~ 给你一个蚊拍.. 如果一下子拍死n只那就能得n*n的分~ 问最高能得多少分~ 输入: 一个t n 表示t秒n只蚊子 接下来t行每行给出n只蚊子的横纵坐标 思路: 因为n<10 所以可以用状态DP来找~ dp[t][stat] 表示在第t次的stat状态下 eg
·
2015-11-13 14:03
cpp
1326. Bottle Taps
space=1&num=1326
状态压缩DP
题目大意: 要买某几种 tap 每种买一个 既可以单个买 也可以成套买 求最优买法
·
2015-11-13 13:30
PS
hdu 4753 Fishhead’s Little Game
状态压缩dp
解博弈问题(记忆化搜索)。
·
2015-11-13 12:52
game
hdu 4628 Pieces
pid=4628
状态压缩DP
时间复杂度应该是 16*(2^32) 但是运行时要远小于这个数 所以加一定剪枝就可以过 代码: #include<iostream> #include
·
2015-11-13 10:21
HDU
HDOJ 2442 -bricks
状态压缩DP
一直TLE.打表过的..
有5个砖块..加上一个空着不放..那么有6种状态..所以很明显的可以用6进制的状态DP... 不过这么做..我觉得我已经能优化的都优化了...还是超时..一看数据范围是100*6..打表先AC了.. 看有大神用3进制状态DP水过..Orz...看了好久没看懂...觉得自己状态DP还是很表面~~ Prog
·
2015-11-13 09:42
压缩
Mondriaan's Dream(poj2411)
题意:求1*2的牌填满n*m的表格有多少种不同的方法;
状态压缩dp
(注:思路来自不知名的大神) 用2进制的01表示不放还是放 第i行只和i-1行有关 枚举i-1行的每个状态,推出由此状态能达到的
·
2015-11-13 09:20
poj
SGU 131 贴地砖类型
状态压缩DP
用dp[i][j]表示要贴第i层时,第i-1层的状态, 然后每一层dfs枚举一下情况即可 dfs(x, y, pre, now) x层数 y枚举的当前列 pre 前一层状态, now当前层状态 根据当前列y的这位上pre和now状态,确定要贴的图形, 注意贴完以后pre层必须满状态,在贴的过程中处理必须优先把pre层贴满。 状态转移如下图:.表示空,*表示满 #i
·
2015-11-13 08:05
压缩
[置顶]
状态压缩DP
简单入门题 11题
1.每一行用一个二进制数表示, 有些二进制数是题目中不合法的状态,我们可以预处理出一行合法状态的个数,在递推的过程中复杂度就会大大降低。 POJ 3254 Corn Fields code POJ 3311 Hie with the P
·
2015-11-13 08:25
压缩
hdu 5025 Saving Tang Monk
状态压缩dp
+广搜
jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk
状态压缩
·
2015-11-13 07:07
HDU
hdu 5094 Maze
状态压缩dp
+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze
状态压缩dp
·
2015-11-13 07:06
HDU
Light OJ 1316 A Wedding Party 最短路+
状态压缩DP
Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两点之前的最短路 然后仅仅考虑那些商店 个数小于15嘛 就是TSP问题
状态压缩
·
2015-11-13 06:47
part
hdu3811(
状态压缩dp
)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3811 题目大意:给定1~N个数,求出至少满足一个条件的排列总数。M个条件如下:Ai位置的数为Bi 分析:通过求出一个条件不满足的排列总数,从而间接的求出满足至少一个条件的排列总数。 dp[n][
·
2015-11-13 06:00
HDU
状态压缩DP
题目小节 (一)
最近被
状态压缩DP
虐得不行,今天终于决定正视自己的弱项,好好把DP练习一下,把今天做的几道
状态压缩DP
总结一下,一定要想办法摆脱DP弱菜这个标签!!! http://poj.org/problem?
·
2015-11-13 05:47
压缩
SGU 132 Another Chocolate Maniac
状态压缩DP
感觉不是很好写的一道状态压缩。 dp[i][j][k]表示第 i 行状态为k,第i - 1行状态为 j,具体细节见代码。 内存卡的很死,要用滚动数组。 还有一个比较坑爹的地方是它在输入蛋糕的时候中间可能会出现空行,一开始我用getchar()读,连第一组数据都过不去,后来改成scanf( "%s", str )才过……错了好多次。 1 #include <c
·
2015-11-13 05:44
man
POJ 2441
题解:
状态压缩dp
,dp[i][state]为前i头牛,用了state的牧场时的总数。但是直接开n*2^m会爆空间,但是每头牛都只与前面一头牛相关,所以可以辗转一下,只记录两维即可。
·
2015-11-13 04:50
poj
HDU 4758 Walk Through Squares( AC自动机 +
状态压缩DP
)
题意:给你两个串A,B, 问一个串长为M+N且包含A和B且恰好包含M个R的字符串有多少种组合方式,所有字符串中均只含有字符L和R。 dp[i][j][k][S]表示串长为i,有j个R,在自动机中的状态为k,包含AB的状态为S的方案个数。 PS1.之前用long long int超时了两次 PS2.把行列搞错了WA了几次 #include <cstdio> #inc
·
2015-11-13 03:43
AC自动机
HDU 4057 Rescue the Rabbit ( AC自动机 +
状态压缩DP
)
模板来自notonlysuccess. 模式串只有10个,并且重复出现的分值不累加,因此很容易想到状态压缩。 将模式串加入AC自动机,最多有10*100个状态。 dp[i][j][k]:串长为i,在Trie图上的状态为j,已经包含的模式串为k(二进制表示,第x位为1代表已经包含第x个串)。 dp[i][j][k]为true或false代表该状态是否可达。 沿着Trie图中的边走进行DP,
·
2015-11-13 03:41
AC自动机
poj 1185 炮兵阵地
状态压缩dp
思路:定义一个三维数组dp[x][i][j]其中x为now和pre两种状态,now表示当前两行最优解,pre表示出了本行外,前两行的最优解。那么状态转移方程为 dp[now][j][k]=max(dp[now][j][k],dp[pre][k][r]+num[i][j][1])。num[i][j][1]表示第i行的第j个状态的1的个数。转移条件是!(num[i][j][0]&num[i-
·
2015-11-13 02:46
poj
poj 2411
状态压缩dp
思路:将每一行看做一个二进制位,那么所有的合法状态为相邻为1的个数一定要为偶数个。这样就可以先把所有的合法状态找到。由于没一层的合法状态都是一样的,那么可以用一个数组保存。由第i-1行到第i行的状态转移是dp[i][now|num[j]]+=dp[i-1][k],其中now为(1<<m)-1-k;也就是把k中含有0的变1,1边0。k为第i-1行的所有二进制状态,转移条件是k&n
·
2015-11-13 02:45
poj
poj 3254
状态压缩DP
思路:把每行的数当做是一个二进制串,0不变,1变或不变,找出所有的合法二进制形式表示的整数,即相邻不同为1,那么第i-1行与第i行的状态转移方程为dp[i][j]+=dp[i-1][k]; 这个方程得前提条件是num[i][j]&num[i-1][k]==0,也就是他们表示的二进制形式相与为0,那么就不存在相邻为1的情况。 #include<iostream> #inc
·
2015-11-13 02:45
poj
hdu1565 网络流或
状态压缩DP
对于网络流有一个定理: 最小点权覆盖集=最大网络流; 最大点权独立集=总权值-最小点权覆盖集; 网络流解法代码如下: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define N 1010 #define M 50010 #
·
2015-11-13 02:48
HDU
hdu 4739 状压DP
这里有
状态压缩DP
的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过。
·
2015-11-13 00:31
HDU
HDU3362+状态压缩
1 /* 2
状态压缩dp
3 dp[i] = min( dp[ i-j ]+cost[ j ] ); 4 由i-j的状态转到i的状态 5 */ 6 #include<stdio.h
·
2015-11-13 00:40
HDU
hdu 4144
状态压缩dp
#include<map> #include<set> #include<cmath> #include<queue> #include<cstdio> #include<vector> #include<string> #include<cstdlib> #include<cst
·
2015-11-13 00:56
HDU
POJ 2978
题解:
状态压缩DP
,并不算太复杂,dp[i][j][mask]代表前i个珠子,以j结尾,且前面已经出现了mask珠子的最小代价。
·
2015-11-13 00:04
poj
状态压缩 -- POJ 1185 炮兵阵地【
状态压缩DP
】
POJ 1185 炮兵阵地 核心算法:dp状态压缩中文题分析: graph[i]存储第i行的地形,用一二进制数表示,山地对应位置为1,平地对应位置为0leg[N]中存放所有能够合法的单行安排状态,用二进制数表示,驻兵对应位置为1,不驻兵对应位置为0dp[i][j][k]表示第i行状态为j,i-1行状态为k时最多的哨兵数目,j,k均对应leg[]中状态 dp[i][cur][p1] = get
·
2015-11-12 22:14
poj
HDU 1074 Doing Homework【
状态压缩DP
】
HDU 1074 Doing Homework 算法核心:
状态压缩DP
大意:有n门课程作业,每门作业的截止时间为D,需要花费的时间为C,若作业不能按时完成,每超期1天扣1分。
·
2015-11-12 22:13
home
HDU4628+
状态压缩DP
1 /* 2
状态压缩DP
3 dp[ i ]:达到i状态的最小step。 4 题意:每次可以去掉一个回文串,求最少几步能取完。
·
2015-11-12 22:25
HDU
HDU4539+
状态压缩DP
1 /* 2 题意:n行m列的矩阵,1表示可以放东西,0表示不可以。曼哈顿距离为2的两个位置最多只能有一个位置放东西。 3 问最多放多少个东西。 4 */ 5 #include<stdio.h> 6 #include<string.h> 7 #include<stdlib.h> 8 #include<algorithm>
·
2015-11-12 22:19
HDU
HDU1565+
状态压缩dp
简单的压缩状态 dp 1 /* 2
状态压缩dp
3 同hdu2167 4 利用滚动数组!!
·
2015-11-12 22:17
HDU
HDU2167+
状态压缩DP
状态压缩dp
详见代码 1 /* 2
状态压缩dp
3 dp[ i ][ j ]:第i行j状态的最大和 4 dp[i][j] = max( dp[i-1][k]+sum[i][
·
2015-11-12 22:16
HDU
uvalive 6323
状态压缩DP
思路:dp[i][j][x]表示状态 i 以 j 为结束 得分为 x 的方案数。 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; int dp[500
·
2015-11-12 21:06
live
UVAlive 4999
状态压缩DP
+最短路
压缩的是格子中的H,然后计算反向SPFA计算如何最短。 然后问题的关键是如何任何人合并,看如下的代码注释部分(2,3是正解)。 枚举当前要求的人的状态,然后枚举其子状态(必须至少包含1人的),然后更新每个点,再来一次最短路就可以了。 比较NB的写法是注释中的第三种写法。 目前唯一不解的是,为什么第一种写法是错误的,枚举包含一个人的状态为什么不行呢?求指点呀…… 其实就是一个赤裸裸的斯坦那
·
2015-11-12 21:49
live
HDU 3681 Prison Break(BFS+二分+
状态压缩DP
)
Problem Description Rompire is a robot kingdom and a lot of robots live there peacefully. But one day, the king of Rompire was captured by human beings. His thinking circuit was changed by human and
·
2015-11-12 21:01
break
ZOJ3718 Diablo II(
状态压缩dp
)
题意:一个人物有K(K<=7)种技能,每种技能都有bi,ci,di值,表示该技能不能点超过bi次,每点一次加ci,点满bi次有一个附加得分di。然后还有N件武器,武器本身会有能力加成,然后每个武器可能会对应着多种的技能,当你装备了这些武器的时候对应的技能的技能点+1(但是武器的技能点不能重复,也就是如果a武器和b武器都能提高技能1的话,如果你两件都装备了只算一次)。现在这些都给定给你了,问的
·
2015-11-12 19:38
ZOJ
COJ 1175 A Tour Around Hangzhou (最短路+
状态压缩DP
)
最后用
状态压缩DP
求结果(
状态压缩DP
参考上一篇)。 View Code #include &
·
2015-11-12 19:48
round
COJ 1129 送货到家 (
状态压缩DP
)
分析:看到n<=15这样的条件容易想到
状态压缩DP
。hamilton回路其实就是n个城市的一个圆排列,任选一个起点最后的结果都一样,我们不妨设结点0为起点,状态设计也就不难了。
·
2015-11-12 19:47
压缩
暑假集训每日一题0720(
状态压缩DP
)
Description 有N个点,有一个商人想经过所有的点恰好一次(商人最终不一定要回到起点),求商人需要走最短路程。 Input 两个整数N,M表示图的点数和边数,接下去有M行,每行三个整数a ,b ,c 表示从a到b有一条无向边,长度是c N<=15 c<=10000 Output 输出商人需要走过的最
·
2015-11-12 19:15
压缩
[poj 2978]Colored Stones[
状态压缩DP
]
题意: 给出n个石子,一共m种颜色.问最少去掉几个石子使得同种颜色全连续. 思路见注释. #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int kMAX=105; /// dp[x][y][z],x指
·
2015-11-12 18:59
color
POJ 3311 Hie with the Pie (BFS+最短路+状态压缩)
所以把10 * 1024 种状态来一遍,取sum【0】【(1<<n)-1】的最小值 只是把
状态压缩DP
改成bfs+状态压缩了 #include <c
·
2015-11-12 17:14
with
HDU 5067 (
状态压缩DP
+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子。把地图上所有石子都运回起点,问最少耗时。 解题思路: 首先得YY出来。 最少耗时肯定是从起点出发,把所有石子点走一遍且只走一遍,把石子装在车上,然后最后回到起点。 由于石子堆最多也就10个。不难看出这就是个裸的TSP。 首先BFS计算出每个石子
·
2015-11-12 17:01
HDU
上一页
7
8
9
10
11
12
13
14
下一页
按字母分类:
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
其他