——状压DP
文章平均质量分 50
FeBr2
(๑•̀ㅂ•́)و✧
展开
-
状压DP——Travelling ( HDU 3001 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3001分析:1.因为每个城市最多访问2次,所以用状态0,1,2记录某个城市被访问的次数,把1~N个城市的访问状态连在一起可以用一个三进制数记录。2.定义DP[i][j]中i为一个三进制数表示N个城市的访问情况,然后j表示目前访问到的城市序号,那么我们可以得出状态转移方程: dp[i+3v原创 2016-08-07 16:21:36 · 324 阅读 · 0 评论 -
状压DP (Floyd+状态压缩 )——Hie with the Pie( POJ 3311 )
题目链接: http://poj.org/problem?id=3311分析: 给出n个点,标号从1到n,再给出一个(n+1)*(n+1)大小的矩阵,表示从i到j的花费时间,0代表出发点,从0出发,最后需要回到0,每个点必须都去过,可以重复走,求最短时间。题解: 1.先Floyd求一遍两点间最短路:void Floyd(){ for(int k=0;k<=n;k++)原创 2016-08-08 20:28:23 · 376 阅读 · 0 评论 -
枚举+状态压缩——2013 杭州区域赛A ( UVA 6454 )
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4465参考链接: http://blog.csdn.net/min_lala/article/details/15500613分析: 给出一个N×M的网格,其中’#’表示不原创 2016-08-25 20:49:37 · 427 阅读 · 0 评论 -
状压DP——hihoCoder 1044
题目链接:https://hihocoder.com/problemset/problem/1044题意:给出一个数组A,长度为N,表示每个位置i含有A[i]数量的垃圾,求选取一些位置,在满足连续M个位置中被选中的位置不超过Q个的条件下使得这些被选中的位置对应的垃圾数量的总和最大,输出这个最大数量分析:我们很容易得出一个转移方程:DP[i]→DP[i+1]DP[i] \rightarrow DP原创 2017-02-12 17:04:25 · 320 阅读 · 0 评论 -
状压DP——hihoCoder 1048
题目链接: https://hihocoder.com/problemset/problem/1048 题意:给出一个N*M的矩形盒子,往里面放入1*2大小的长方形蛋糕,问将这个盒子填满有多少种放法分析:这还是一个通过记录搜索结果来进一步枚举状态的题,我们通过从上往下搜索每一行,从左往右搜索每一格,每次的状态定义为当前行和下一行的放置情况,若当前格子放有蛋糕,则标记为1,否则为0,所以每次枚举的原创 2017-02-13 15:17:19 · 320 阅读 · 0 评论 -
状压DP ( 预处理减少状态 )——炮兵阵地 (POJ 1185)
题目链接: http://poj.org/problem?id=1185分析: 这道题和POJ 3254很相似,不过因为它的条件改成上下左右的两块地方不能放置炮兵,又因为一行最多10格,所以需要先预处理一下每一行全是平地时候能放置炮兵的所有情况。 (之前直接开1<<10的二维数组,跑一下结果把ubuntu系统卡得都快没反应了)题解: 1.预处理一行放置炮兵的情况:int con[66]原创 2016-08-08 16:20:12 · 330 阅读 · 0 评论 -
状态压缩——hihoCoder 1087
题目链接: https://hihocoder.com/problemset/problem/1087题意: 给出一个N个点,M条边的有向图,求其中有多少条哈密顿回路分析:这道题非常直接的做法就是DFS搜索了,我们可以从任一顶点出发,不走重复点,若能回到顶点,那么哈密顿回路数量+1。但是直接暴力搜会超时,所以需要加上一个位运算的优化。位运算搜索:将邻接链表压缩成一个二进制串,第 i 位为1原创 2017-02-14 16:06:12 · 401 阅读 · 0 评论 -
状压DP——ZOJ 3777
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777题意: 给出一个N*N的数字格,第 i,j 个数字表示第 j 道题放在第 i 个位置做的得分,求最终得分超过M的做题顺序有多少种分析: 因为N最大为12,若枚举长度为N的所有排列,一共有4亿多种,肯定会超时,所以我们会联想到状态压缩状态:用一个长度为N的原创 2017-02-16 11:10:54 · 545 阅读 · 1 评论 -
状压DP——FZU 2218
题目链接: https://vjudge.net/problem/FZU-2218题意:给出一个字符串,求出它的两个子串,满足互相之间不含有相同字符,且长度的乘积最大,输出这个最大乘积。分析:首先,我们要计算出这个字符串的所有子串包含的字符情况,因为不同字符的个数最多为16,所以我们可以通过一个长度为16的二进制串来表示某一个子串的字符包含情况,可以在 O(len(str)2)O(len(str原创 2017-05-03 22:08:19 · 357 阅读 · 0 评论