状态压缩DP
DS-K
这个作者很懒,什么都没留下…
展开
-
hihoCoder 1044 状态压缩·一
题目链接:http://hihocoder.com/problemset/problem/1044?sid=784987题意:有n个数,可以选取一些数,但是在每个连续区间长度为m的区间中的被选中数的个数不能超过q个,问可以选取到的和的最大值是多少。思路:我们用dp[i][j]表示在第i个位置上,j是一个二进制状态,表示包括当前位置的前M-1个位置上的数是否被选取。那么dp[原创 2016-04-29 08:15:38 · 962 阅读 · 0 评论 -
POJ 3420 Quad Tiling
题目链接:http://poj.org/problem?id=3420题意:用1×2的砖铺满4×n的矩形,问一共有多少种铺法。思路:状态压缩DP, 只有两种铺法,横着铺和竖着铺。我们按行dp,那么就要把每一行的状态表示出来。对于横着铺,可以用两个相邻的1来表示;对于竖着放,我们将上面那行的位置记0,下面那行的位置记1,也就是竖着的0 1表示。先确定第一行的状态(按照状态规定,第原创 2016-04-20 20:12:48 · 277 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream
题目链接:http://poj.org/problem?id=2411题意:用1×2的砖铺满m×n的矩形,问一共有多少种铺法。思路:状态压缩DP, 只有两种铺法,横着铺和竖着铺。我们按行dp,那么就要把每一行的状态表示出来。对于横着铺,可以用两个相邻的1来表示;对于竖着放,我们将上面那行的位置记0,下面那行的位置记1,也就是竖着的0 1表示。先确定第一行的状态(按照状态规定,第一行原创 2016-04-20 20:17:33 · 269 阅读 · 0 评论 -
UVA 1252 Twenty Questions
题目链接:http://acm.hust.edu.cn/vjudge/problem/36067题意:有n个物体,每个物体都有m个特征,用m位的01串表示,意为此物品是否含有该特征。现在每次可以询问一个特征,并且得到答案(是否含有该特征)。最坏的情况至少需要几次询问才可以查询到物品。思路:dp[s1][s2]表示当前查询状态为s1时,得到的答案状态为s2时还需要查询的最少次原创 2016-08-19 00:32:55 · 261 阅读 · 0 评论 -
UVA 11825 Hackers' Crackdown
题目链接:http://acm.hust.edu.cn/vjudge/problem/18913题意:假设你是一个黑客,侵入了n台计算机,一共有n种服务,每台计算机都运行着所有的服务。对于每台计算机,你可以选择一项服务,终止这台计算机和它相邻计算机的该服务。求最多可以使得多少服务全部停止。思路:如果停止掉一个服务,也就是选择一个计算机集合,使得每台和它相邻的计算机能够构成全原创 2016-08-29 22:17:30 · 345 阅读 · 0 评论 -
UVALive 4794 Sharing Chocolate
题目链接:http://acm.hust.edu.cn/vjudge/problem/12055题意:一块长x宽y的巧克力,每次只能横向或者竖向沿直线切割,问能否将一块巧克力切割成给定的n个面积。思路:dp[x][s]表示还没有切出来的面积状态为s,剩余矩形的最短边为x时是否可行。保证一开始就满足s的面积和等于初始矩形,所以切的过程中也是相等的,只需要记录一个边即可。原创 2016-08-29 23:24:44 · 324 阅读 · 0 评论 -
UVA 1633 Dyslexic Gollum
题目链接:http://acm.hust.edu.cn/vjudge/problem/51194题意:求长度为n的01串有多少个不含长度至少为k的回文连续子串。思路:状态压缩dp,dp[i][s]表示前i位,且包括第i位在内的最后k位状态未s时的合法字符串数量。长的回文串是由短的回文串构成的,所以当我们只要在长度为k的时候把这个回文串给结束掉就可以了,但是回文串有奇偶长度,原创 2016-08-21 11:18:06 · 997 阅读 · 1 评论 -
HDU 4352 XHXJ's LIS
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4352题意:求[L,R]范围内有多少数满足数位中最长上升子序列长度为m。思路:dp[i][j][k]表示还有i位没确定,前面的子序列状态为j时,要求的最长上升子序列长度为k时的个数。用一个10位的二进制参考nlogn求最长上升子序列的思想更新状态。如果出现数x,如原创 2016-08-22 10:44:02 · 286 阅读 · 0 评论 -
UVA 11741 Ignore the Blocks
题目链接:http://vjudge.net/problem/UVA-11741题意:给一个n*m的棋盘,有k个坏格子,现在用1*2的骨牌覆盖全部的好格子,问有多少种方案。m思路:由于n很大 , k范围很小,我们按照坏格子所在的行分阶段,相邻的两个坏格子之间的好格子用矩阵快速幂去计算。可以维护每个状态的方案数,即一个数组(每行最多16个状态,0~15)。当前状态的行号是原创 2016-11-04 21:41:22 · 321 阅读 · 0 评论 -
POJ 2686 Traveling by Stagecoach
题目链接:http://poj.org/problem?id=2686题意:有m个城市互相连接,每一条道路有一个距离。现在有n张车票,每张车票上都记有马的匹数且只能用一次,从一个城市移动到另一个城市所需的时间等于城市之间道路的长度除以马的数量的结果,求从城市a到城市b的最短时间。思路:状态压缩DP,因为车票只能用一次,所以我们记录车票使用情况的状态,以及当前所在的城市编号进原创 2016-04-20 20:02:53 · 262 阅读 · 0 评论 -
POJ 2663 Tri Tiling
题目链接:http://poj.org/problem?id=2663题意:用1×2的砖铺满3×n的矩形,问一共有多少种铺法。思路:状态压缩DP, 只有两种铺法,横着铺和竖着铺。我们按行dp,那么就要把每一行的状态表示出来。对于横着铺,可以用两个相邻的1来表示;对于竖着放,我们将上面那行的位置记0,下面那行的位置记1,也就是竖着的0 1表示。先确定第一行的状态(按照状态规定,第原创 2016-04-20 19:39:13 · 259 阅读 · 0 评论 -
HDU 2167 Pebbles
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167题意:给一个n×n的格子,每个里面有一个数,如果一个数被选取了,那么它周围的八个位置的数都不可以被选取,问可以选到的最大数之和是多少?思路:基础状态压缩Dp,按行来递推,dp[i][state]表示第i行的选数状态为state时可以选到的最大值(用二进制数来表状态,比如原创 2016-04-18 17:06:46 · 287 阅读 · 0 评论 -
POJ 3254 Corn Fields
题目链接:http://poj.org/problem?id=3254题意:在n×m的地图上,有一些地方可以放牛,有一些地方不可以,而且一只牛的上下左右位置不可以再放其它的牛,求在给定地图上一共有多少种放牛方案。思路:状态压缩DP,我们一行一行的放,当前行放置会受到上一行放置状态的影响,我们用dp[i][s]表示第i行的放置状态为s时的方案数,那么dp[i][s] =原创 2016-04-18 17:09:27 · 206 阅读 · 0 评论 -
POJ 1185 炮兵阵地
题目链接:http://poj.org/problem?id=1185题意:在n×m的地图上放置炮兵,每个炮兵的攻击范围是上下左右各延伸两格,地图上有一些位置为山地,不可以放置,问给出地图可以放置炮兵的最多数量。思路:状态压缩DP,如果当前第i行放置,由于考虑到炮兵的攻击范围,所以需要枚举前两行的状态,所以用dp[i][s1][s2]来表示第i行状态为s1,上一行状态为原创 2016-04-18 17:12:59 · 240 阅读 · 0 评论 -
WOJ 1608 Calculation
题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1608题意:将n个数划分为若干个部分,然后每一部分里面的数进行+/-操作,如果一个部分里面的数可以凑成s,那么就计1,问最多可以凑成多少个s。比如1 2 3 4 5 -> (1+4) (2+3) (5) 1 2 3 8 8 -> (8-3) (8-1-2)原创 2016-04-18 17:15:11 · 271 阅读 · 0 评论 -
POJ 3311 Hie with the Pie
题目链接:http://poj.org/problem?id=3311题意:有一个人从编号为0的点出发,现在想把编号为1~n的点都经过至少一次,最后再回到0号点,每一条边都有一个权值,问走一遍最小值是多少。思路:状态压缩Dp,由于n很小,先用floyd算出两点之间的最短距离。然后用dp[s][i]表示,当前在i点,经过点的状态为s(用二进制表示每个点当前是否已经走过)的最小值。原创 2016-04-19 11:22:28 · 241 阅读 · 0 评论 -
HDU 3001 Travelling
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001题意:有n个城市,有一个人想全部逛一遍,但是每个城市最多经过两次,他可以从任意一个城市出发,问最小消费。思路:三进制TSP的状态压缩DP。先预处理出来状态S对应的每一位的值。然后枚举状态以及当前在的城市编号和上一个所在的城市。#include #inclu原创 2016-04-19 19:01:33 · 255 阅读 · 0 评论 -
POJ 2288 Islands and Bridges
题目链接: http://poj.org/problem?id=2288题意:给出一个图,每个点都有权值,有一些边连接着这些点,现在定义一条哈密顿回路产生的值为以下三者之和:1、回路上的各个点的权值之和 2、回路中相邻点的乘积之和 3、如果回路中有c1c2c3,且c1与c3也相邻,那么就加上c1*c2*c3。现在求一共有多少条回路产生的值可以同时达到最大。思路:状态压缩DP,因原创 2016-04-19 19:38:09 · 267 阅读 · 0 评论 -
POJ 2441 Arrange the Bulls
题目链接:http://poj.org/problem?id=2441题意:有n个奶牛,m个牛棚(编号1~m),每只奶牛都会有自己喜欢的牛棚的编号,问有多少种方法可以将它们全部安排进牛棚且每个牛棚只有一只奶牛。思路:状态压缩DP,因为牛棚每个只能用一次,所以把每个牛棚是否用过作为状态压缩,然后从第一个牛开始枚举到第n个。再枚举下一个牛用哪个牛棚,就可以转移了。原创 2016-04-19 20:06:59 · 282 阅读 · 0 评论 -
POJ 2817 WordStack
题目链接:http://poj.org/problem?id=2817题意:有n个单词,如果两个单词相邻,可以在一个单词前面填充一些空格,使得两个单词对应位置上的字母相同(这些位置可以不相邻),最大的相同数量为这两个单词所产生的值。现在要找到一种排列方式,使得这些单词产生值之和最大。思路:先计算出这些单词两两相邻所产生的值,在LCS的基础上做了一个小改动。然后用状态压缩DP计算原创 2016-04-19 19:13:02 · 317 阅读 · 0 评论